/*
* File: tiles.h
* Created by: ennewalker on Sat Jan 5 01:33:53 2008 UTC
*/
#ifndef TILES_H
#define TILES_H
#ifdef USE_TILE
#include "tiledef_defines.h"
#include "beam.h"
#include "enum.h"
#include "show.h"
enum tag_version
{
TILETAG_PRE_MCACHE = 71,
TILETAG_CURRENT = 72
};
struct demon_data
{
demon_data() { head = body = wings = 0; }
int head;
int body;
int wings;
};
//*tile1.cc: get data from core part and drives tile drawing codes
//**convert in-game data to tile index
int tileidx_feature(dungeon_feature_type feat, int gx, int gy);
int tileidx_player(int job);
void tileidx_unseen(unsigned int &fg, unsigned int &bg, int ch,
const coord_def& gc);
int tileidx_item(const item_def &item);
int tileidx_item_throw(const item_def &item, int dx, int dy);
int tileidx_bolt(const bolt &bolt);
int tileidx_zap(int colour);
int tile_idx_unseen_terrain(int x, int y, int what);
int tile_unseen_flag(const coord_def& gc);
int tileidx_monster_base(const monsters *mon, bool detected = false);
int tileidx_monster(const monsters *mon, bool detected = false);
int tileidx_spell(spell_type spell);
// Player tile related
int get_gender_from_tile(int parts[]);
int tilep_species_to_base_tile(int sp = you.species,
int level = you.experience_level);
void tilep_draconian_init(int sp, int level, int &base, int &head, int &wing);
void tilep_race_default(int sp, int gender, int level, int *parts);
void tilep_job_default(int job, int gender, int *parts);
void tilep_calc_flags(const int parts[], int flag[]);
void tilep_part_to_str(int number, char *buf);
int tilep_str_to_part(char *str);
void tilep_scan_parts(char *fbuf, dolls_data &doll);
void tilep_print_parts(char *fbuf, const dolls_data &doll);
int tilep_equ_weapon(const item_def &item);
int tilep_equ_shield(const item_def &item);
int tilep_equ_armour(const item_def &item);
int tilep_equ_cloak(const item_def &item);
int tilep_equ_helm(const item_def &item);
int tilep_equ_gloves(const item_def &item);
int tilep_equ_boots(const item_def &item);
// Tile display related
void tile_place_monster(int gx, int gy, int idx, bool foreground = true,
bool detected = false);
void tile_place_item(int x, int y, int idx);
void tile_place_item_marker(int x, int y, int idx);
void tile_place_cloud(int x, int y, cloud_struct cl);
void tile_place_ray(const coord_def& gc, bool in_range);
void tile_draw_rays(bool resetCount);
void tile_clear_buf();
void tile_finish_dngn(unsigned int *tileb, int cx, int cy);
// Tile Inventory display
void tile_draw_inv(int flag = -1);
// Multiple pickup
void tile_pick_menu();
// Set the default type of walls and floors.
void tile_init_default_flavour();
// Get the default types of walls and floors
void tile_default_flv(level_area_type lev, branch_type br, tile_flavour &flv);
// Clear the per-cell wall and floor flavors.
void tile_clear_flavour();
// Initialise per-cell types of walls and floors using defaults.
void tile_init_flavour();
void tile_init_flavour(const coord_def &gc);
void tile_floor_halo(dungeon_feature_type target, int tile);
void tile_set_force_redraw_tiles(bool redraw);
void tile_set_force_redraw_inv(bool redraw);
tag_pref string2tag_pref(const char *opt);
const char *tag_pref2string(tag_pref pref);
/**************************************/
/* tile2.cc image manipulation */
/**************************************/
// init them all
void TileInit();
void TileResizeScreen(int x, int y);
// display tile cursor, returns old cursor value there
int TileDrawCursor(int x, int y, int flag);
void TileNewLevel(bool first_time);
// edit player tile
void init_player_doll();
void save_doll_file(FILE *dollf);
int item_unid_type(const item_def &item);
int tile_known_weapon_brand(const item_def item);
int tile_corpse_brand(const item_def item);
int get_clean_map_idx(int tile_idx);
// Flags for drawing routines
enum tile_flags
{
// Foreground flags
TILE_FLAG_S_UNDER = 0x00000800,
TILE_FLAG_FLYING = 0x00001000,
TILE_FLAG_PET = 0x00002000,
TILE_FLAG_GD_NEUTRAL = 0x00004000,
TILE_FLAG_NEUTRAL = 0x00008000,
TILE_FLAG_STAB = 0x00010000,
TILE_FLAG_MAY_STAB = 0x00020000,
TILE_FLAG_NET = 0x00040000,
TILE_FLAG_POISON = 0x00080000,
TILE_FLAG_ANIM_WEP = 0x00100000,
TILE_FLAG_FLAME = 0x00200000,
TILE_FLAG_BERSERK = 0x00400000,
// MDAM has 5 possibilities, so uses 3 bits.
TILE_FLAG_MDAM_MASK = 0x03800000,
TILE_FLAG_MDAM_LIGHT = 0x00800000,
TILE_FLAG_MDAM_MOD = 0x01000000,
TILE_FLAG_MDAM_HEAVY = 0x01800000,
TILE_FLAG_MDAM_SEV = 0x02000000,
TILE_FLAG_MDAM_ADEAD = 0x02800000,
// Background flags
TILE_FLAG_RAY = 0x00000800,
TILE_FLAG_MM_UNSEEN = 0x00001000,
TILE_FLAG_UNSEEN = 0x00002000,
TILE_FLAG_CURSOR1 = 0x00004000,
TILE_FLAG_CURSOR2 = 0x00008000,
TILE_FLAG_CURSOR3 = 0x0000C000,
TILE_FLAG_CURSOR = 0x0000C000,
TILE_FLAG_BLOOD = 0x00010000,
TILE_FLAG_HALO = 0x00020000,
TILE_FLAG_NEW_STAIR = 0x00040000,
TILE_FLAG_WAS_SECRET = 0x00080000,
TILE_FLAG_TRAV_EXCL = 0x00100000,
TILE_FLAG_EXCL_CTR = 0x00200000,
TILE_FLAG_SANCTUARY = 0x00400000,
TILE_FLAG_TUT_CURSOR = 0x00800000,
TILE_FLAG_RAY_OOR = 0x01000000,
TILE_FLAG_OOR = 0x02000000,
TILE_FLAG_WATER = 0x04000000,
// General
TILE_FLAG_MASK = 0x000007FF
};
enum
{
TILEI_FLAG_SELECT = 0x0100,
TILEI_FLAG_TRIED = 0x0200,
TILEI_FLAG_EQUIP = 0x0400,
TILEI_FLAG_FLOOR = 0x0800,
TILEI_FLAG_CURSE = 0x1000,
TILEI_FLAG_CURSOR = 0x2000,
TILEI_FLAG_MELDED = 0x4000,
TILEI_FLAG_INVALID = 0x8000
};
enum
{
TILEP_GENDER_FEMALE = 0,
TILEP_GENDER_MALE = 1,
TILEP_SHOW_EQUIP = 0x1000
};
enum tile_player_flag_cut
{
TILEP_FLAG_HIDE,
TILEP_FLAG_NORMAL,
TILEP_FLAG_CUT_CENTAUR,
TILEP_FLAG_CUT_NAGA
};
// normal tile size in px
enum
{
TILE_X = 32,
TILE_Y = 32
};
// Don't change this without also modifying the data save/load routines.
enum
{
NUM_MAX_DOLLS = 10
};
#endif
#endif