1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504
|
/*
* File: externs.h
* Summary: Fixed size 2D vector class that asserts if you do something bad.
* Written by: Linley Henzell
*
* Change History (most recent first):
*
* <3> 7/29/00 JDJ Renamed sh_x, sh_y, sh_greed, sh_type, sh_level so
* they start with shop.
* <2> 7/29/00 JDJ Switched to using bounds checked array classes.
* Made a few char arrays unsigned char arrays.
*/
#ifndef EXTERNS_H
#define EXTERNS_H
#include <queue>
#include <time.h>
#include "defines.h"
#include "enum.h"
#include "FixAry.h"
#include "message.h"
#define INFO_SIZE 200
extern char info[INFO_SIZE]; // defined in acr.cc {dlb}
extern char st_prn[20]; // defined in acr.cc {dlb}
extern char str_pass[80]; // defined in acr.cc {dlb}
extern unsigned char show_green; // defined in view.cc {dlb}
// defined in mon-util.cc -- w/o this screen redraws *really* slow {dlb}
extern FixedVector<unsigned short, 1000> mcolour;
#ifdef SHORT_FILE_NAMES
const int kNameLen = 30;
const int kFileNameLen = 6;
const int kFileNameSize = 5 + kFileNameLen;
#else
#ifdef SAVE_DIR_PATH
// file name length has to be able to cover full paths -- bwross
const int kNameLen = 30;
const int kFileNameLen = 250;
const int kFileNameSize = 5 + kFileNameLen;
#else
const int kNameLen = 30;
const int kFileNameLen = 28;
const int kFileNameSize = 5 + kFileNameLen;
#endif
#endif
// Length of Path + File Name
const int kPathLen = 256;
// This value is used to mark that the current berserk is free from
// penalty (Xom's granted or from a deck of cards).
#define NO_BERSERK_PENALTY -1
struct coord_def
{
int x;
int y;
// coord_def( int x_in = 0, int y_in = 0 ) : x(x_in), y(y_in) {};
};
struct dice_def
{
int num;
int size;
dice_def( int n = 0, int s = 0 ) : num(n), size(s) {}
};
// output from direction() function:
struct dist
{
bool isValid; // valid target chosen?
bool isTarget; // target (true), or direction (false)?
bool isMe; // selected self (convenience: tx == you.x_pos,
// ty == you.y_pos)
bool isCancel; // user cancelled (usually <ESC> key)
int tx,ty; // target x,y or logical extension of beam to map edge
int dx,dy; // delta x and y if direction - always -1,0,1
// internal use - ignore
int prev_target; // previous target
};
struct bolt
{
// INPUT parameters set by caller
int range; // minimum range
int rangeMax; // maximum range
int type; // missile gfx
int colour;
int flavour;
int source_x, source_y; // beam origin
dice_def damage;
int ench_power, hit;
int target_x, target_y; // intended target
char thrower; // what kind of thing threw this?
char ex_size; // explosion radius (0==none)
int beam_source; // NON_MONSTER or monster index #
char beam_name[40];
bool isBeam; // beams? (can hits multiple targets?)
// OUTPUT parameters (tracing, ID)
bool obviousEffect; // did an 'obvious' effect happen?
int fr_count, foe_count; // # of times a friend/foe is "hit"
int fr_power, foe_power; // total levels/hit dice affected
// INTERNAL use - should not usually be set outside of beam.cc
bool isTracer; // is this a tracer?
bool aimedAtFeet; // this was aimed at self!
bool msgGenerated; // an appropriate msg was already mpr'd
bool isExplosion; // explosion phase (as opposed to beam phase)
bool smartMonster; // tracer firer can guess at other mons. resists?
bool canSeeInvis; // tracer firer can see invisible?
bool isFriendly; // tracer firer is enslaved or pet
int foeRatio; // 100* foe ratio (see mons_should_fire())
};
struct run_check_dir
{
unsigned char grid;
char dx;
char dy;
};
struct delay_queue_item
{
int type;
int duration;
int parm1;
int parm2;
};
struct item_def
{
unsigned char base_type; // basic class (ie OBJ_WEAPON)
unsigned char sub_type; // type within that class (ie WPN_DAGGER)
short plus; // +to hit, charges, corpse mon id
short plus2; // +to dam, sub-sub type for boots and helms
long special; // special stuff
unsigned char colour; // item colour
unsigned long flags; // item statuc flags
short quantity; // number of items
short x; // x-location; for inventory items = -1
short y; // y-location; for inventory items = -1
short link; // link to next item; for inventory items = slot
};
struct player
{
char turn_is_over; // flag signaling that player has performed a timed action
unsigned char prev_targ;
char your_name[kNameLen];
unsigned char species;
char run_x;
char run_y;
FixedVector< run_check_dir, 3 > run_check; // array of grids to check
char running;
char special_wield;
char deaths_door;
char fire_shield;
double elapsed_time; // total amount of elapsed time in the game
unsigned char synch_time; // amount to wait before calling handle_time
unsigned char disease;
char max_level;
int x_pos;
int y_pos;
int hunger;
FixedVector<char, NUM_EQUIP> equip;
int hp;
int hp_max;
int base_hp; // temporary max HP loss (rotting)
int base_hp2; // base HPs from levels (and permanent loss)
int magic_points;
int max_magic_points;
int base_magic_points; // temporary max MP loss? (currently unused)
int base_magic_points2; // base MPs from levels and potions of magic
char strength;
char intel;
char dex;
char max_strength;
char max_intel;
char max_dex;
char redraw_hunger;
char hunger_state;
bool wield_change; // redraw weapon
char redraw_burden;
char redraw_hit_points;
char redraw_magic_points;
char redraw_strength;
char redraw_intelligence;
char redraw_dexterity;
char redraw_experience;
char redraw_armour_class;
char redraw_gold;
char redraw_evasion;
unsigned char hit_points_regeneration;
unsigned char magic_points_regeneration;
unsigned long experience;
int experience_level;
unsigned int gold;
int char_class;
char class_name[30];
// char speed; // now unused
int time_taken;
char shield_blocks; // number of shield blocks since last action
FixedVector< item_def, ENDOFPACK > inv;
int burden;
char burden_state;
FixedVector<unsigned char, 25> spells;
char spell_no;
unsigned char char_direction; //
unsigned char pet_target;
int your_level; // offset by one (-1 == 0, 0 == 1, etc.) for display
// durational things. Why didn't I do this for haste etc
// right from the start? Oh well.
FixedVector<int, NUM_DURATIONS> duration;
int invis;
int conf;
int paralysis;
int slow;
int haste;
int might;
int levitation;
int poison;
int rotting;
int berserker;
int exhausted; // fatigue counter for berserk
int berserk_penalty; // pelnalty for moving while berserk
FixedVector<unsigned char, 30> attribute; // see ATTRIBUTES in enum.h
char is_undead; // see UNDEAD_STATES in enum.h
std::queue< delay_queue_item > delay_queue; // pending actions
FixedVector<unsigned char, 50> skills;
FixedVector<unsigned char, 50> practise_skill;
FixedVector<unsigned int, 50> skill_points;
int skill_cost_level;
int total_skill_points;
int exp_available;
FixedArray<unsigned char, 5, 50> item_description;
FixedVector<unsigned char, 50> unique_items;
FixedVector<unsigned char, 50> unique_creatures;
char level_type;
char where_are_you;
FixedVector<unsigned char, 30> branch_stairs;
char religion;
unsigned char piety;
unsigned char gift_timeout;
FixedVector<unsigned char, 100> penance;
FixedVector<unsigned char, 100> mutation;
FixedVector<unsigned char, 100> demon_pow;
unsigned char magic_contamination;
char confusing_touch;
char sure_blade;
FixedVector<unsigned char, 50> had_book;
unsigned char betrayal;
unsigned char normal_vision; // how far the species gets to see
unsigned char current_vision; // current sight radius (cells)
unsigned char hell_exit; // which level plyr goes to on hell exit.
// This field is here even in non-WIZARD compiles, since the
// player might have been playing previously under wiz mode.
bool wizard; // true if player has entered wiz mode.
time_t birth_time; // start time of game
int old_hunger; // used for hunger delta-meter (see output.cc)
};
extern struct player you;
struct monsters
{
int type;
int hit_points;
int max_hit_points;
int hit_dice;
int armour_class; // great -- more mixed american/proper spelling
int evasion;
unsigned int speed;
unsigned int speed_increment;
unsigned char x;
unsigned char y;
unsigned char target_x;
unsigned char target_y;
FixedVector<int, 8> inv;
unsigned char attitude; // from MONS_ATTITUDE
unsigned int behaviour;
unsigned int foe;
FixedVector<unsigned int, NUM_MON_ENCHANTS> enchantment;
unsigned char flags; // bitfield of boolean flags
unsigned int number; // #heads (hydra), etc.
int foe_memory; // how long to 'remember' foe x,y
// once they go out of sight
};
struct cloud_struct
{
unsigned char x;
unsigned char y;
unsigned char type;
int decay;
};
struct shop_struct
{
unsigned char x;
unsigned char y;
unsigned char greed;
unsigned char type;
unsigned char level;
FixedVector<unsigned char, 3> keeper_name;
};
struct trap_struct
{
unsigned char x;
unsigned char y;
unsigned char type;
};
struct crawl_environment
{
unsigned char rock_colour;
unsigned char floor_colour;
FixedVector< item_def, MAX_ITEMS > item; // item list
FixedVector< monsters, MAX_MONSTERS > mons; // monster list
FixedArray< unsigned char, GXM, GYM > grid; // terrain grid
FixedArray< unsigned char, GXM, GYM > mgrid; // monster grid
FixedArray< int, GXM, GYM > igrid; // item grid
FixedArray< unsigned char, GXM, GYM > cgrid; // cloud grid
FixedArray< unsigned char, GXM, GYM > map; // discovered terrain
FixedArray< unsigned int, 19, 19> show; // view window char
FixedArray< unsigned short, 19, 19> show_col; // view window colour
FixedVector< cloud_struct, MAX_CLOUDS > cloud; // cloud list
unsigned char cloud_no;
FixedVector< shop_struct, MAX_SHOPS > shop; // shop list
FixedVector< trap_struct, MAX_TRAPS > trap; // trap list
FixedVector< int, 20 > mons_alloc;
int trap_known;
double elapsed_time; // used during level load
};
extern struct crawl_environment env;
struct ghost_struct
{
char name[20];
FixedVector<unsigned char, 20> values;
};
extern struct ghost_struct ghost;
extern void (*viewwindow) (char, bool);
struct system_environment
{
char *crawl_name;
char *crawl_pizza;
char *crawl_rc;
char *crawl_dir;
char *home;
};
extern system_environment SysEnv;
struct game_options
{
long autopickups; // items to autopickup
bool verbose_dump; // make character dumps contain more detail
bool colour_map; // add colour to the map
bool clean_map; // remove unseen clouds/monsters
bool show_uncursed; // label known uncursed items as "uncursed"
bool always_greet; // display greeting message when reloading
bool easy_open; // open doors with movement
bool easy_armour; // allow auto-removing of armour
bool easy_butcher; // open doors with movement
int easy_confirm; // make yesno() confirming easier
int easy_quit_item_prompts; // make item prompts quitable on space
int colour[16]; // macro fg colours to other colours
int background; // select default background colour
int channels[NUM_MESSAGE_CHANNELS]; // msg channel colouring
int weapon; // auto-choose weapon for character
int chaos_knight; // choice of god for Chaos Knights (Xom/Makleb)
int death_knight; // choice of god/necromancy for Death Knights
int priest; // choice of god for priests (Zin/Yred)
bool random_pick; // randomly generate character
int hp_warning; // percentage hp for danger warning
int hp_attention; // percentage hp for danger attention
char race; // preselected race
char cls; // preselected class
int sc_entries; // # of score entries
unsigned int friend_brand; // Attribute for branding friendly monsters
bool no_dark_brand; // Attribute for branding friendly monsters
#ifdef WIZARD
int wiz_mode; // yes, no, never in wiz mode to start
#endif
};
extern game_options Options;
struct tagHeader
{
short tagID;
long offset;
};
struct scorefile_entry
{
char version;
char release;
long points;
char name[kNameLen];
long uid; // for multiuser systems
char race;
char cls;
char race_class_name[5]; // overrides race & cls if non-null
char lvl; // player level.
char best_skill; // best skill #
char best_skill_lvl; // best skill level
int death_type;
int death_source; // 0 or monster TYPE
int mon_num; // sigh...
char death_source_name[40]; // overrides death_source
char dlvl; // dungeon level (relative)
char level_type; // what kind of level died on..
char branch; // dungeon branch
int final_hp;
char wiz_mode; // character used wiz mode
time_t birth_time; // start time of character
time_t death_time; // end time of character
int num_diff_runes; // number of rune types in inventory
int num_runes; // total number of runes in inventory
};
#endif // EXTERNS_H
|