From 9e511702e814c94093bb77ae460f8be8b7a49b16 Mon Sep 17 00:00:00 2001 From: j-p-e-g Date: Sun, 23 Mar 2008 21:06:01 +0000 Subject: Refix tiles monster brands to show the heart for friendlies. And another huge code cleanup. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@3838 c06c8d41-db1a-0410-9941-cceddc491573 --- crawl-ref/source/tile2.cc | 1059 +++++++++++++++++++++++---------------------- 1 file changed, 534 insertions(+), 525 deletions(-) (limited to 'crawl-ref/source/tile2.cc') diff --git a/crawl-ref/source/tile2.cc b/crawl-ref/source/tile2.cc index a428ed3157..1da3ced842 100644 --- a/crawl-ref/source/tile2.cc +++ b/crawl-ref/source/tile2.cc @@ -58,19 +58,19 @@ extern TileRegionClass *region_item2; //Internal static img_type DollCacheImg; -static void tile_draw_grid(int kind, int xx, int yy); -static void clear_tcache(); -static void init_tcache(); -static void register_tile_mask(int tile, int region, int *cp, - char *ms, bool smalltile = false); -static void tcache_compose_normal(int ix, int *fg, int *bg); +static void _tile_draw_grid(int kind, int xx, int yy); +static void _clear_tcache(); +static void _init_tcache(); +static void _register_tile_mask(int tile, int region, int *cp, + char *ms, bool smalltile = false); +static void _tcache_compose_normal(int ix, int *fg, int *bg); -static void mcache_init(); +static void _mcache_init(); //Internal variables static bool force_redraw_tile = false; -static bool force_redraw_inv = false; +static bool force_redraw_inv = false; void tile_set_force_redraw_tiles(bool redraw) { @@ -83,7 +83,7 @@ void tile_set_force_redraw_inv(bool redraw) } static unsigned int t1buf[TILE_DAT_XMAX+2][TILE_DAT_YMAX+2], - t2buf[TILE_DAT_XMAX+2][TILE_DAT_YMAX+2]; + t2buf[TILE_DAT_XMAX+2][TILE_DAT_YMAX+2]; static unsigned int tb_bk[TILE_DAT_YMAX*TILE_DAT_XMAX*2]; #define MAX_ITEMLIST 200 @@ -95,11 +95,11 @@ int itemlist_iflag[MAX_ITEMLIST]; int itemlist_flag = -1; int itemlist_n=0; -static int wall_flavors = 0; -static int floor_flavors = 0; +static int wall_flavors = 0; +static int floor_flavors = 0; static int special_flavors = 0; -static int wall_tile_idx = 0; -static int floor_tile_idx = 0; +static int wall_tile_idx = 0; +static int floor_tile_idx = 0; static int special_tile_idx = 0; int get_num_wall_flavors() @@ -248,22 +248,23 @@ void TileInit() int x, y, k; textcolor(WHITE); - TileImg = ImgLoadFileSimple("tile"); + TileImg = ImgLoadFileSimple("tile"); PlayerImg = ImgLoadFileSimple("player"); - WallImg = ImgLoadFileSimple("wall2d"); + WallImg = ImgLoadFileSimple("wall2d"); if (!TileImg) { - cprintf("Main tile not initialized\n"); - getch(); - end(-1); + cprintf("Main tile not initialized\n"); + getch(); + end(-1); } ImgSetTransparentPix(TileImg); - if (ImgWidth(TileImg)!= TILE_X * TILE_PER_ROW || - ImgHeight(TileImg) < TILE_Y*( (TILE_TOTAL + TILE_PER_ROW -1)/TILE_PER_ROW)) + if (ImgWidth(TileImg)!= TILE_X * TILE_PER_ROW + || ImgHeight(TileImg) < + TILE_Y * ((TILE_TOTAL + TILE_PER_ROW -1)/TILE_PER_ROW) ) { cprintf("Main tile size invalid\n"); getch(); @@ -304,34 +305,35 @@ void TileInit() tcache_head = (int *)malloc(sizeof(int)*tcache_kind*tc_hash); - for(k=0;knext = n; - if(n!=NULL) n->prev = p; + if (ix == head_old) + return; + if (p!=NULL) + p->next = n; + if (n!=NULL) + n->prev = p; tcache_head[kind_n_hash] = ix; tc[head_old].prev = &tc[ix]; @@ -431,7 +436,7 @@ void lift_tcache(int ix, int kind, int hash){ // Find cached image of fg+bg // If not found, compose and cache it -static int tcache_find_id_normal(int kind, int *fg, int *bg, int *is_new) +static int _tcache_find_id_normal(int kind, int *fg, int *bg, int *is_new) { int hash = 0; // Don't use hash int kind_n_hash = kind * tc_hash + hash; @@ -441,7 +446,8 @@ static int tcache_find_id_normal(int kind, int *fg, int *bg, int *is_new) *is_new=0; - while(1){ + while (true) + { tile_cache *next = tc0->next; if ((int)tc0->id[0] == fg[0] && (int)tc0->id[1] == bg[0]) @@ -451,7 +457,7 @@ static int tcache_find_id_normal(int kind, int *fg, int *bg, int *is_new) { //end of used cache *is_new = 1; - tcache_compose_normal(tc0->idx, fg, bg); + _tcache_compose_normal(tc0->idx, fg, bg); tc0->id[0] = fg[0]; tc0->id[1] = bg[0]; break; @@ -543,65 +549,74 @@ void tcache_overlay_player(img_type img, int dx, int dy, *copy = 0; } -/** overlay a tile onto an exsisting image with transpalency operation */ -void register_tile_mask(int tile, int region, int *copy, - char *mask, bool smalltile) +/* overlay a tile onto an exsisting image with transpalency operation */ +void _register_tile_mask(int tile, int region, int *copy, + char *mask, bool smalltile) { int x0, y0, x, y; - int sx= region_sx_normal[region]; - int sy= region_sy_normal[region]; - int wx= region_wx_normal[region]; - int wy= region_wy_normal[region]; - int ox=0; - int oy=0; + int sx = region_sx_normal[region]; + int sy = region_sy_normal[region]; + int wx = region_wx_normal[region]; + int wy = region_wy_normal[region]; + int ox = 0; + int oy = 0; + int ux = wx; + int uy = wy; img_type src = TileImg; - int ux=wx; - int uy=wy; - + tile &= TILE_FLAG_MASK; - x0 = (tile % TILE_PER_ROW)*TILE_X; - y0 = (tile / TILE_PER_ROW)*TILE_Y; + x0 = (tile % TILE_PER_ROW) * TILE_X; + y0 = (tile / TILE_PER_ROW) * TILE_Y; - if (*copy!=0) memset(mask, 0, ux*uy); + if (*copy!=0) + memset(mask, 0, ux*uy); if (*copy == 2) { if (smalltile) - { ux = wx; + + for (x = 0; x < wx; x++) + { + for (y = 0; y < wy; y++) + { + if (!ImgIsTransparentAt(src, x0+sx+x, y0+sy+y)) + mask[(y+oy) * ux + (x+ox)] = 1; + } } - for(x=0;x= tile_xmax || yy>= tile_ymax) return; + if (xx < 0 || yy < 0 || xx >= tile_xmax || yy>= tile_ymax) + return; + fg[0] = t1buf[xx+1][yy+1]; bg[0] = t2buf[xx+1][yy+1]; ix_old = screen_tcach_idx[kind][xx+yy*tile_xmax]; - ix = tcache_find_id_normal(kind, fg, bg, &is_new); + ix = _tcache_find_id_normal(kind, fg, bg, &is_new); - screen_tcach_idx[kind][xx+yy*tile_xmax]=ix; - if(is_new || ix!=ix_old || force_redraw_tile) + screen_tcach_idx[kind][xx+yy*tile_xmax] = ix; + + if (is_new || ix!=ix_old || force_redraw_tile) { int x_dest = tcache_ox_normal[kind]+xx* TILE_UX_NORMAL; int y_dest = tcache_oy_normal[kind]+yy* TILE_UY_NORMAL; @@ -609,8 +624,7 @@ void tile_draw_grid(int kind, int xx, int yy){ int wy = tcache_wy_normal[kind]; ImgCopy(tcache_image[kind], - 0, ix*wy, wx, wy, - ScrBufImg, x_dest, y_dest, 1); + 0, ix*wy, wx, wy, ScrBufImg, x_dest, y_dest, 1); } } @@ -618,11 +632,13 @@ void update_single_grid(int x, int y) { int sx, sy, wx, wy; - tile_draw_grid(TCACHE0_NORMAL, x, y); + _tile_draw_grid(TCACHE0_NORMAL, x, y); + sx = x*TILE_UX_NORMAL; sy = y*TILE_UY_NORMAL; wx = TILE_UX_NORMAL; wy = TILE_UY_NORMAL; + region_tile->redraw(sx, sy, sx+wx-1, sy+wy-1); } @@ -636,10 +652,10 @@ void redraw_spx_tcache(int tile) { int fg = tcache[kind][idx].id[0]; int bg = tcache[kind][idx].id[1]; - if ((fg & TILE_FLAG_MASK) == tile || - (bg & TILE_FLAG_MASK) == tile) + if ((fg & TILE_FLAG_MASK) == tile + || (bg & TILE_FLAG_MASK) == tile) { - tcache_compose_normal(idx, &fg, &bg); + _tcache_compose_normal(idx, &fg, &bg); } } } @@ -648,15 +664,15 @@ void redraw_spx_tcache(int tile) void get_bbg(int bg, int *new_bg, int *bbg) { int bg0 = bg & TILE_FLAG_MASK; - *bbg=TILE_DNGN_FLOOR; - *new_bg= bg0; + *bbg = TILE_DNGN_FLOOR; + *new_bg = bg0; - if(bg0 == TILE_DNGN_UNSEEN || - (bg0 >= TILE_DNGN_ROCK_WALL_OFS && bg0 < TILE_DNGN_WAX_WALL) || - bg0 == 0) + if (bg0 == TILE_DNGN_UNSEEN || bg0 == 0 + || (bg0 >= TILE_DNGN_ROCK_WALL_OFS && bg0 < TILE_DNGN_WAX_WALL)) + { *bbg = 0; - else - if( bg0 >= TILE_DNGN_FLOOR && bg0 <= TILE_DNGN_SHALLOW_WATER) + } + else if (bg0 >= TILE_DNGN_FLOOR && bg0 <= TILE_DNGN_SHALLOW_WATER) { *bbg = bg; *new_bg = 0; @@ -680,7 +696,7 @@ int sink_mask_tile(int bg, int fg) } //normal -void tcache_compose_normal(int ix, int *fg, int *bg) +void _tcache_compose_normal(int ix, int *fg, int *bg) { int bbg; int new_bg; @@ -709,7 +725,7 @@ void tcache_compose_normal(int ix, int *fg, int *bg) if ((bg0 & TILE_FLAG_TRAVEL_EX) && !(bg0 & TILE_FLAG_UNSEEN)) { tcache_overlay(tc_img, ix, TILE_TRAVEL_EXCLUSION, TREGION_0_NORMAL, &c, - NULL); + NULL); } if (bg0 & TILE_FLAG_RAY) @@ -721,13 +737,11 @@ void tcache_compose_normal(int ix, int *fg, int *bg) if (sink) { int flag = 2; - register_tile_mask(sink, TREGION_0_NORMAL, &flag, sink_mask); + _register_tile_mask(sink, TREGION_0_NORMAL, &flag, sink_mask); tcache_overlay(tc_img, ix, fg0, TREGION_0_NORMAL, &c, sink_mask); } else - { tcache_overlay(tc_img, ix, fg0, TREGION_0_NORMAL, &c, NULL); - } } if (fg0 & TILE_FLAG_NET) @@ -736,12 +750,12 @@ void tcache_compose_normal(int ix, int *fg, int *bg) if (fg0 & TILE_FLAG_S_UNDER) { tcache_overlay(tc_img, ix, TILE_SOMETHING_UNDER, - TREGION_0_NORMAL, &c, NULL); + TREGION_0_NORMAL, &c, NULL); } // Pet mark int status_shift = 0; - if ((fg0 & TILE_FLAG_MAY_STAB) == TILE_FLAG_PET) + if (fg0 & TILE_FLAG_PET) { tcache_overlay(tc_img, ix, TILE_HEART, TREGION_0_NORMAL, &c, NULL); status_shift += 10; @@ -760,14 +774,14 @@ void tcache_compose_normal(int ix, int *fg, int *bg) else if ((fg0 & TILE_FLAG_MAY_STAB) == TILE_FLAG_MAY_STAB) { tcache_overlay(tc_img, ix, TILE_MAY_STAB_BRAND, TREGION_0_NORMAL, &c, - NULL); + NULL); status_shift += 5; } if (fg0 & TILE_FLAG_POISON) { tcache_overlay(tc_img, ix, TILE_POISON, TREGION_0_NORMAL, &c, NULL, - status_shift); + status_shift); status_shift += 5; } @@ -779,7 +793,7 @@ void tcache_compose_normal(int ix, int *fg, int *bg) if (bg0 & TILE_FLAG_MM_UNSEEN) { tcache_overlay(tc_img, ix, TILE_MAGIC_MAP_MESH, TREGION_0_NORMAL, &c, - NULL); + NULL); } // Don't let the "new stair" icon cover up any existing icons, but @@ -787,13 +801,13 @@ void tcache_compose_normal(int ix, int *fg, int *bg) if (bg0 & TILE_FLAG_NEW_STAIR && status_shift == 0) { tcache_overlay(tc_img, ix, TILE_NEW_STAIR, - TREGION_0_NORMAL, &c, NULL); + TREGION_0_NORMAL, &c, NULL); } if ((bg0 & TILE_FLAG_TRAVEL_EX) && (bg0 & TILE_FLAG_UNSEEN)) { tcache_overlay(tc_img, ix, TILE_TRAVEL_EXCLUSION, TREGION_0_NORMAL, &c, - NULL); + NULL); } // Tile cursor @@ -837,13 +851,14 @@ void StoreDungeonView(unsigned int *tileb) if (tileb == NULL) tileb = tb_bk; - for(y=0;yparts; - int c=1; + int c = 1; bool changed = false; int default_parts[TILEP_PARTS_TOTAL]; @@ -1315,10 +1326,11 @@ static bool draw_doll(img_type img, dolls_data *doll, bool force_redraw = false, if (your_doll) { tilep_race_default(you.species, parts[TILEP_PART_BASE] % 2, - you.experience_level, default_parts); + you.experience_level, default_parts); if (default_parts[TILEP_PART_BASE] != parts[TILEP_PART_BASE]) force_redraw = true; + parts[TILEP_PART_BASE] = default_parts[TILEP_PART_BASE]; // TODO enne - make these configurable. @@ -1327,53 +1339,39 @@ static bool draw_doll(img_type img, dolls_data *doll, bool force_redraw = false, } // convert TILEP_SHOW_EQUIP into real parts number - for(i = 0; i < TILEP_PARTS_TOTAL; i++) + for (i = 0; i < TILEP_PARTS_TOTAL; i++) { parts2[i] = parts[i]; if (parts2[i] == TILEP_SHOW_EQUIP) { + int item = -1; switch (i) { - int item; case TILEP_PART_HAND1: item = you.equip[EQ_WEAPON]; - if (you.attribute[ATTR_TRANSFORMATION] == - TRAN_BLADE_HANDS) - { + if (you.attribute[ATTR_TRANSFORMATION] == TRAN_BLADE_HANDS) parts2[i] = TILEP_HAND1_BLADEHAND; - } else if (item == -1) - { parts2[i] = 0; - } else - { parts2[i] = tilep_equ_weapon(you.inv[item]); - } - break; + break; case TILEP_PART_HAND2: item = you.equip[EQ_SHIELD]; - if (you.attribute[ATTR_TRANSFORMATION] == - TRAN_BLADE_HANDS) - { + if (you.attribute[ATTR_TRANSFORMATION] == TRAN_BLADE_HANDS) parts2[i] = TILEP_HAND2_BLADEHAND; - } else if (item == -1) - { parts2[i] = 0; - } else - { parts2[i] = tilep_equ_shield(you.inv[item]); - } break; case TILEP_PART_BODY: item = you.equip[EQ_BODY_ARMOUR]; if (item == -1) parts2[i] = 0; - else + else parts2[i] = tilep_equ_armour(you.inv[item]); break; @@ -1456,16 +1454,14 @@ static bool draw_doll(img_type img, dolls_data *doll, bool force_redraw = false, if (!changed && !force_redraw) - { return false; - } tilep_calc_flags(parts2, flags); ImgClear(img); // Hack: change overlay order of boots/skirts - for(i = 0; i < TILEP_PARTS_TOTAL; i++) - p_order2[i]=p_order[i]; + for (i = 0; i < TILEP_PARTS_TOTAL; i++) + p_order2[i]=p_order[i]; // swap boot and leg-armor if (parts2[TILEP_PART_LEG] < TILEP_LEG_SKIRT_OFS) @@ -1474,35 +1470,38 @@ static bool draw_doll(img_type img, dolls_data *doll, bool force_redraw = false, p_order2[4] = TILEP_PART_BOOTS; } - for(i = 0; i < TILEP_PARTS_TOTAL; i++) + for (i = 0; i < TILEP_PARTS_TOTAL; i++) { int p = p_order2[i]; int ymax = TILE_Y; - if (flags[p]==TILEP_FLAG_CUT_CENTAUR) ymax=18; - if (flags[p]==TILEP_FLAG_CUT_NAGA) ymax=18; + if (flags[p] == TILEP_FLAG_CUT_CENTAUR + || flags[p] == TILEP_FLAG_CUT_NAGA) + { + ymax=18; + } - if (parts2[p] && p == TILEP_PART_BOOTS && - (parts2[p] == TILEP_BOOTS_NAGA_BARDING || - parts2[p] == TILEP_BOOTS_CENTAUR_BARDING)) + if (parts2[p] && p == TILEP_PART_BOOTS + && (parts2[p] == TILEP_BOOTS_NAGA_BARDING + || parts2[p] == TILEP_BOOTS_CENTAUR_BARDING)) { // Special case for barding. They should be in "boots" but because // they're double-wide, they're stored in a different part. We just // intercept it here before drawing. - char tile = parts2[p] == TILEP_BOOTS_NAGA_BARDING ? - TILEP_SHADOW_NAGA_BARDING : TILEP_SHADOW_CENTAUR_BARDING; - tcache_overlay_player(img, 0, 0, TILEP_PART_SHADOW, tile, - TILE_Y, &c); + char tile = (parts2[p] == TILEP_BOOTS_NAGA_BARDING) ? + TILEP_SHADOW_NAGA_BARDING : + TILEP_SHADOW_CENTAUR_BARDING; + + tcache_overlay_player(img, 0, 0, TILEP_PART_SHADOW, + tile, TILE_Y, &c); } else if(parts2[p] && flags[p]) - { tcache_overlay_player(img, 0, 0, p, parts2[p], ymax, &c); - } } return true; } static void load_doll_data(const char *fn, dolls_data *dolls, int max, - int *mode, int *cur) + int *mode, int *cur) { char fbuf[1024]; int cur0 = 0; @@ -1510,8 +1509,8 @@ static void load_doll_data(const char *fn, dolls_data *dolls, int max, FILE *fp = NULL; std::string dollsTxtString = datafile_path(fn, false, true); - const char *dollsTxt = dollsTxtString.c_str()[0] == 0 ? - "dolls.txt" : dollsTxtString.c_str(); + const char *dollsTxt = (dollsTxtString.c_str()[0] == 0) ? + "dolls.txt" : dollsTxtString.c_str(); if ( (fp = fopen(dollsTxt, "r")) == NULL ) { @@ -1522,19 +1521,19 @@ static void load_doll_data(const char *fn, dolls_data *dolls, int max, { // Don't take gender too seriously. -- Enne tilep_race_default(you.species, coinflip() ? 1 : 0, - you.experience_level, dolls[i].parts); + you.experience_level, dolls[i].parts); dolls[i].parts[TILEP_PART_SHADOW] = 1; - dolls[i].parts[TILEP_PART_CLOAK] = TILEP_SHOW_EQUIP; - dolls[i].parts[TILEP_PART_BOOTS] = TILEP_SHOW_EQUIP; - dolls[i].parts[TILEP_PART_LEG] = TILEP_SHOW_EQUIP; - dolls[i].parts[TILEP_PART_BODY] = TILEP_SHOW_EQUIP; - dolls[i].parts[TILEP_PART_ARM] = TILEP_SHOW_EQUIP; - dolls[i].parts[TILEP_PART_HAND1] = TILEP_SHOW_EQUIP; - dolls[i].parts[TILEP_PART_HAND2] = TILEP_SHOW_EQUIP; - dolls[i].parts[TILEP_PART_HAIR] = TILEP_SHOW_EQUIP; - dolls[i].parts[TILEP_PART_BEARD] = TILEP_SHOW_EQUIP; - dolls[i].parts[TILEP_PART_HELM] = TILEP_SHOW_EQUIP; + dolls[i].parts[TILEP_PART_CLOAK] = TILEP_SHOW_EQUIP; + dolls[i].parts[TILEP_PART_BOOTS] = TILEP_SHOW_EQUIP; + dolls[i].parts[TILEP_PART_LEG] = TILEP_SHOW_EQUIP; + dolls[i].parts[TILEP_PART_BODY] = TILEP_SHOW_EQUIP; + dolls[i].parts[TILEP_PART_ARM] = TILEP_SHOW_EQUIP; + dolls[i].parts[TILEP_PART_HAND1] = TILEP_SHOW_EQUIP; + dolls[i].parts[TILEP_PART_HAND2] = TILEP_SHOW_EQUIP; + dolls[i].parts[TILEP_PART_HAIR] = TILEP_SHOW_EQUIP; + dolls[i].parts[TILEP_PART_BEARD] = TILEP_SHOW_EQUIP; + dolls[i].parts[TILEP_PART_HELM] = TILEP_SHOW_EQUIP; } } @@ -1557,30 +1556,22 @@ static void load_doll_data(const char *fn, dolls_data *dolls, int max, } if (max == 1) { - for(int j = 0; j <= cur0; j++) + for (int j = 0; j <= cur0; j++) { if (fscanf(fp, "%s", fbuf) != EOF) - { tilep_scan_parts(fbuf, dolls[0].parts); - } else - { break; - } } } else { - for(int j = 0; j < max; j++) + for (int j = 0; j < max; j++) { if (fscanf(fp, "%s", fbuf) != EOF) - { tilep_scan_parts(fbuf, dolls[j].parts); - } else - { break; - } } } @@ -1595,7 +1586,7 @@ static void load_doll_data(const char *fn, dolls_data *dolls, int max, void TilePlayerEdit() { const int p_lines[PARTS_ITEMS]= - { + { TILEP_SELECT_DOLL, TILEP_PART_BASE, TILEP_PART_HELM, @@ -1608,7 +1599,7 @@ void TilePlayerEdit() TILEP_PART_LEG, TILEP_PART_BOOTS, TILEP_PART_CLOAK - }; + }; const char *p_names[PARTS_ITEMS]= { @@ -1626,7 +1617,7 @@ void TilePlayerEdit() " Cloak:" }; - const char *gender_name[2] ={ + const char *gender_name[2] = { "Male", "Fem " }; @@ -1660,24 +1651,23 @@ void TilePlayerEdit() memset( copy_doll, 0, sizeof(dolls_data) ); tilep_race_default(you.species, current_gender, - you.experience_level, copy_doll); + you.experience_level, copy_doll); - for(j = 0; j < DOLLS_MAX; j++) + for (j = 0; j < DOLLS_MAX; j++) { memset( dolls[j].parts, 0, sizeof(dolls_data) ); memset( undo_dolls[j].parts, 0, sizeof(dolls_data) ); tilep_race_default(you.species, current_gender, you.experience_level, - dolls[j].parts); + dolls[j].parts); tilep_race_default(you.species, current_gender, you.experience_level, - undo_dolls[j].parts); + undo_dolls[j].parts); } // load settings load_doll_data("dolls.txt", dolls, DOLLS_MAX, &mode, &cur_doll); - for(j = 0; j < DOLLS_MAX; j++) - { + for (j = 0; j < DOLLS_MAX; j++) undo_dolls[j] = dolls[j]; - } + clrscr(); cgotoxy(1,1, GOTO_MSG); mpr("Select Part : [j][k]or[up][down]"); @@ -1690,8 +1680,9 @@ void TilePlayerEdit() cgotoxy(1, 8, GOTO_MSG); cprintf("Toggle Startup mode : [m] (Current mode:%s)", - ( (mode == TILEP_M_LOADING) ? "Load User's Settings":"Class Default" )); - for (j=0; j < PARTS_ITEMS; j++) + (mode == TILEP_M_LOADING ? "Load User's Settings" + : "Class Default" )); + for (j = 0; j < PARTS_ITEMS; j++) { cgotoxy(1, 1+j, GOTO_STAT); cprintf(p_names[j]); @@ -1701,33 +1692,33 @@ void TilePlayerEdit() // draw strings "Dolls/Parts" into backbuffer tile_str = TILE_TEXT_PARTS_E; - sx = (tile_str % TILE_PER_ROW)*TILE_X; - sy = (tile_str / TILE_PER_ROW)*TILE_Y; + sx = (tile_str % TILE_PER_ROW) * TILE_X; + sy = (tile_str / TILE_PER_ROW) * TILE_Y; ImgCopy(TileImg, sx, sy, TILE_X, TILE_Y/2, - ScrBufImg, (TILE_X * 3) - 8,(TILE_Y * 4) - 8-24, 0); + ScrBufImg, (TILE_X * 3) - 8,(TILE_Y * 4) - 8-24, 0); ImgCopy(TileImg, sx, sy+ TILE_Y/2, TILE_X, TILE_Y/2, - ScrBufImg, (TILE_X * 4) - 8,(TILE_Y * 4) - 8-24, 0); + ScrBufImg, (TILE_X * 4) - 8,(TILE_Y * 4) - 8-24, 0); tile_str = TILE_TEXT_DOLLS_E; - sx = (tile_str % TILE_PER_ROW)*TILE_X; - sy = (tile_str / TILE_PER_ROW)*TILE_Y; + sx = (tile_str % TILE_PER_ROW) * TILE_X; + sy = (tile_str / TILE_PER_ROW) * TILE_Y; + ImgCopy(TileImg, sx, sy, TILE_X, TILE_Y/2, - ScrBufImg, (TILE_X * 3) - 8,PARTS_Y - 8 -24, 0); + ScrBufImg, (TILE_X * 3) - 8,PARTS_Y - 8 -24, 0); ImgCopy(TileImg, sx, sy+ TILE_Y/2, TILE_X, TILE_Y/2, - ScrBufImg, (TILE_X * 4) - 8,PARTS_Y - 8 -24, 0); + ScrBufImg, (TILE_X * 4) - 8,PARTS_Y - 8 -24, 0); ImgClear(DollsListImg); - for(j = 0; j < DOLLS_MAX; j++) + for (j = 0; j < DOLLS_MAX; j++) { - draw_doll(DollCacheImg, &dolls[j], true); + _draw_doll(DollCacheImg, &dolls[j], true); ImgCopy(DollCacheImg, 0, 0, ImgWidth(DollCacheImg), ImgHeight(DollCacheImg), - DollsListImg, j * TILE_X, 0, 1); + DollsListImg, j * TILE_X, 0, 1); } done = 0; - while (!done) { static int inc = 1; @@ -1751,7 +1742,7 @@ void TilePlayerEdit() current_gender = dolls[cur_doll].parts[TILEP_PART_BASE] % 2; cprintf("%s", gender_name[ current_gender ]); - for (i = 2; i tilep_parts_total[ p_lines[cur_part] ]) index = index - tilep_parts_total[ p_lines[cur_part] ] - 1; + tcache_overlay_player(PartsImg, i * TILE_X, 0, p_lines[cur_part], index, TILE_Y, &d); } ImgCopy(PartsImg, 0, 0, ImgWidth(PartsImg), ImgHeight(PartsImg), - ScrBufImg, 3 * TILE_X, 4 * TILE_Y, 0); + ScrBufImg, 3 * TILE_X, 4 * TILE_Y, 0); ImgCopyFromTileImg( TILE_CURSOR, ScrBufImg, - (3 + PARTS_DISP_MAX / 2) * TILE_X, 4 * TILE_Y, 0); + (3 + PARTS_DISP_MAX / 2) * TILE_X, 4 * TILE_Y, 0); } - draw_doll(DollCacheImg, &dolls[cur_doll], true); + _draw_doll(DollCacheImg, &dolls[cur_doll], true); ImgCopy(DollCacheImg, 0, 0, TILE_X, TILE_Y, - DollsListImg, cur_doll*TILE_X, 0, 1); + DollsListImg, cur_doll*TILE_X, 0, 1); ImgCopyToTileImg(TILE_PLAYER, DollCacheImg, 0, 0, 1); ImgCopyFromTileImg(TILE_PLAYER, ScrBufImg, 8*TILE_X, 8*TILE_Y, 0); ImgCopy(DollsListImg, 0, 0, - ImgWidth(DollsListImg), ImgHeight(DollsListImg), - ScrBufImg, 3 * TILE_X, PARTS_Y, 0); + ImgWidth(DollsListImg), ImgHeight(DollsListImg), + ScrBufImg, 3 * TILE_X, PARTS_Y, 0); ImgCopyFromTileImg( TILE_CURSOR, ScrBufImg, (3 + cur_doll) * TILE_X, PARTS_Y, 0); region_tile->redraw(); @@ -1827,33 +1823,34 @@ void TilePlayerEdit() case 'h': inc = -1; break; + case 'l': inc = +1; break; + case 'H': inc = -PARTS_DISP_MAX; break; + case 'L': inc = +PARTS_DISP_MAX; break; + case 'j': - { if (cur_part < (PARTS_ITEMS-1) ) cur_part += 1; else cur_part = 0; break; - } + case 'k': - { if (cur_part > 0) cur_part -= 1; else cur_part = (PARTS_ITEMS-1); break; - } + case 'm': - { if (mode == TILEP_M_LOADING) mode = TILEP_M_DEFAULT; else @@ -1861,112 +1858,105 @@ void TilePlayerEdit() cgotoxy(1, 8, GOTO_MSG); cprintf("Toggle Startup mode : [m] (Current mode:%s)", - ( (mode == TILEP_M_LOADING) ? "Load User's Settings":"Class Default" )); + ( mode == TILEP_M_LOADING ? "Load User's Settings" + : "Class Default" )); break; - } case 't': - { if (cur_part >= 2) { dolls[cur_doll].parts[ p_lines[cur_part] ] = 0; display_parts_idx(cur_part); } break; - } case CONTROL('D'): - { tilep_job_default(you.char_class, current_gender, - dolls[cur_doll].parts); - for(i = 2; i < PARTS_ITEMS; i++) - { - display_parts_idx(i); - } + dolls[cur_doll].parts); + + for (i = 2; i < PARTS_ITEMS; i++) + display_parts_idx(i); break; - } case CONTROL('T'): - { - for(i = 2; i < PARTS_ITEMS; i++) + for (i = 2; i < PARTS_ITEMS; i++) { - undo_dolls[cur_doll].parts[ p_lines[i] ] = dolls[cur_doll].parts[ p_lines[i] ]; + undo_dolls[cur_doll].parts[ p_lines[i] ] + = dolls[cur_doll].parts[ p_lines[i] ]; dolls[cur_doll].parts[ p_lines[i] ] = 0; display_parts_idx(i); } break; - } case CONTROL('C'): - { - for(i = 2; i < PARTS_ITEMS; i++) + for (i = 2; i < PARTS_ITEMS; i++) { - copy_doll[ p_lines[i] ] = dolls[cur_doll].parts[ p_lines[i] ]; + copy_doll[ p_lines[i] ] + = dolls[cur_doll].parts[ p_lines[i] ]; } break; - } case CONTROL('V'): - { - for(i = 2; i < PARTS_ITEMS; i++) + for (i = 2; i < PARTS_ITEMS; i++) { - undo_dolls[cur_doll].parts[ p_lines[i] ] = dolls[cur_doll].parts[ p_lines[i] ]; - dolls[cur_doll].parts[ p_lines[i] ] = copy_doll[ p_lines[i] ]; + undo_dolls[cur_doll].parts[ p_lines[i] ] + = dolls[cur_doll].parts[ p_lines[i] ]; + dolls[cur_doll].parts[ p_lines[i] ] + = copy_doll[ p_lines[i] ]; display_parts_idx(i); } break; - } case CONTROL('Z'): - { - for(i = 2; i < PARTS_ITEMS; i++) + for (i = 2; i < PARTS_ITEMS; i++) { - dolls[cur_doll].parts[ p_lines[i] ] = undo_dolls[cur_doll].parts[ p_lines[i] ]; + dolls[cur_doll].parts[ p_lines[i] ] + = undo_dolls[cur_doll].parts[ p_lines[i] ]; display_parts_idx(i); } break; - } case CONTROL('R'): - { - for(i = 2; i < PARTS_ITEMS; i++) + for (i = 2; i < PARTS_ITEMS; i++) { - undo_dolls[cur_doll].parts[ p_lines[i] ] = dolls[cur_doll].parts[ p_lines[i] ]; + undo_dolls[cur_doll].parts[ p_lines[i] ] + = dolls[cur_doll].parts[ p_lines[i] ]; } - dolls[cur_doll].parts[TILEP_PART_CLOAK] = - one_chance_in(2) * ( random2(tilep_parts_total[ TILEP_PART_CLOAK ]) + 1); - dolls[cur_doll].parts[TILEP_PART_BOOTS] = - ( random2(tilep_parts_total[ TILEP_PART_BOOTS ] + 1) ); - dolls[cur_doll].parts[TILEP_PART_LEG] = - ( random2(tilep_parts_total[ TILEP_PART_LEG ] + 1) ); - dolls[cur_doll].parts[TILEP_PART_BODY] = - ( random2(tilep_parts_total[ TILEP_PART_BODY ] + 1) ); - dolls[cur_doll].parts[TILEP_PART_ARM] = - one_chance_in(2) * ( random2(tilep_parts_total[ TILEP_PART_ARM ]) + 1); - dolls[cur_doll].parts[TILEP_PART_HAND1] = - ( random2(tilep_parts_total[ TILEP_PART_HAND1 ] + 1) ); - dolls[cur_doll].parts[TILEP_PART_HAND2] = - one_chance_in(2) * ( random2(tilep_parts_total[ TILEP_PART_HAND2 ]) + 1); - dolls[cur_doll].parts[TILEP_PART_HAIR] = - ( random2(tilep_parts_total[ TILEP_PART_HAIR ] + 1) ); - dolls[cur_doll].parts[TILEP_PART_BEARD] = - ( (dolls[cur_doll].parts[TILEP_PART_BASE] + 1) % 2) * - one_chance_in(4) * ( random2(tilep_parts_total[ TILEP_PART_BEARD ]) + 1 ); - dolls[cur_doll].parts[TILEP_PART_HELM] = - one_chance_in(2) * ( random2(tilep_parts_total[ TILEP_PART_HELM ]) + 1 ); - for(i = 2; i < PARTS_ITEMS; i++) - { + dolls[cur_doll].parts[TILEP_PART_CLOAK] + = coinflip() * (random2(tilep_parts_total[ TILEP_PART_CLOAK ]) + 1); + dolls[cur_doll].parts[TILEP_PART_BOOTS] + = random2(tilep_parts_total[ TILEP_PART_BOOTS ] + 1); + dolls[cur_doll].parts[TILEP_PART_LEG] + = random2(tilep_parts_total[ TILEP_PART_LEG ] + 1); + dolls[cur_doll].parts[TILEP_PART_BODY] + = random2(tilep_parts_total[ TILEP_PART_BODY ] + 1); + dolls[cur_doll].parts[TILEP_PART_ARM] + = coinflip() * ( random2(tilep_parts_total[ TILEP_PART_ARM ]) + 1); + dolls[cur_doll].parts[TILEP_PART_HAND1] + = random2(tilep_parts_total[ TILEP_PART_HAND1 ] + 1); + dolls[cur_doll].parts[TILEP_PART_HAND2] + = coinflip() * ( random2(tilep_parts_total[ TILEP_PART_HAND2 ]) + 1); + dolls[cur_doll].parts[TILEP_PART_HAIR] + = random2(tilep_parts_total[ TILEP_PART_HAIR ] + 1); + dolls[cur_doll].parts[TILEP_PART_BEARD] + = ((dolls[cur_doll].parts[TILEP_PART_BASE] + 1) % 2) + * one_chance_in(4) + * ( random2(tilep_parts_total[ TILEP_PART_BEARD ]) + 1 ); + dolls[cur_doll].parts[TILEP_PART_HELM] + = coinflip() * ( random2(tilep_parts_total[ TILEP_PART_HELM ]) + 1 ); + + for (i = 2; i < PARTS_ITEMS; i++) display_parts_idx(i); - } + break; - } + case '*': { int part = p_lines[cur_part]; int *target = &dolls[cur_doll].parts[part]; if (part == TILEP_PART_BASE) - continue; + continue; if (*target == TILEP_SHOW_EQUIP) *target = 0; else @@ -1978,18 +1968,18 @@ void TilePlayerEdit() #ifdef WIZARD case '1': dolls[cur_doll].parts[TILEP_PART_DRCHEAD]++; - dolls[cur_doll].parts[TILEP_PART_DRCHEAD] %= - tilep_parts_total[TILEP_PART_DRCHEAD] -1; + dolls[cur_doll].parts[TILEP_PART_DRCHEAD] + %= tilep_parts_total[TILEP_PART_DRCHEAD] - 1; break; + case '2': dolls[cur_doll].parts[TILEP_PART_DRCWING]++; - dolls[cur_doll].parts[TILEP_PART_DRCWING] %= - tilep_parts_total[TILEP_PART_DRCWING] -1; + dolls[cur_doll].parts[TILEP_PART_DRCWING] + %= tilep_parts_total[TILEP_PART_DRCWING] - 1; break; #endif default: - { - } + break; } if (inc != 0) @@ -2002,8 +1992,9 @@ void TilePlayerEdit() cur_doll++; else cur_doll--; + if (cur_doll < 0) - cur_doll = DOLLS_MAX -1; + cur_doll = DOLLS_MAX - 1; else if (cur_doll == DOLLS_MAX) cur_doll = 0; } @@ -2016,10 +2007,12 @@ void TilePlayerEdit() } else { - if (*target == TILEP_SHOW_EQUIP) continue; + if (*target == TILEP_SHOW_EQUIP) + continue; + (*target) += inc; - (*target) += tilep_parts_total[ p_lines[cur_part] ]+1; - (*target) %= tilep_parts_total[ p_lines[cur_part] ]+1; + (*target) += tilep_parts_total[ p_lines[cur_part] ] + 1; + (*target) %= tilep_parts_total[ p_lines[cur_part] ] + 1; } } @@ -2027,21 +2020,19 @@ void TilePlayerEdit() } current_doll = dolls[cur_doll]; - draw_doll(DollCacheImg, ¤t_doll); + _draw_doll(DollCacheImg, ¤t_doll); ImgCopyToTileImg(TILE_PLAYER, DollCacheImg, 0, 0, 1); std::string dollsTxtString = datafile_path("dolls.txt", false, true); - const char *dollsTxt = dollsTxtString.c_str()[0] == 0 ? - "dolls.txt" : dollsTxtString.c_str(); + const char *dollsTxt = (dollsTxtString.c_str()[0] == 0) ? + "dolls.txt" : dollsTxtString.c_str(); - if ( (fp = fopen(dollsTxt, "w+")) == NULL ) - { - } - else + if ( (fp = fopen(dollsTxt, "w+")) != NULL ) { - fprintf(fp, "MODE=%s\n", ( (mode == TILEP_M_LOADING) ? "LOADING":"DEFAULT" ) ); + fprintf(fp, "MODE=%s\n", (mode == TILEP_M_LOADING) ? "LOADING" + : "DEFAULT" ); fprintf(fp, "NUM=%02d\n", cur_doll); - for(j = 0; j < DOLLS_MAX; j++) + for (j = 0; j < DOLLS_MAX; j++) { tilep_print_parts(fbuf, dolls[j].parts); fprintf(fp, "%s\n", fbuf); @@ -2055,18 +2046,20 @@ void TilePlayerEdit() ImgClear(ScrBufImg); redraw_spx_tcache(TILE_PLAYER); - for(x=0;x>8)&1; + int g_gender = (pseudo_rand >> 8) & 1; - for (x=0; x 25) p= TILEP_BODY_PLATE_BLACK; - else - if (ac > 20) p= TILEP_BODY_BANDED; - else - if (ac > 15) p= TILEP_BODY_SCALEMAIL; - else - if (ac > 10) p= TILEP_BODY_CHAINMAIL; - else - if (ac > 5 ) p= TILEP_BODY_LEATHER_HEAVY; - else - p= TILEP_BODY_ROBE_BLUE; + for (x = TILEP_PART_CLOAK; x < TILEP_PARTS_TOTAL; x++) + { + if (doll.parts[x] == TILEP_SHOW_EQUIP) + { + doll.parts[x] = 1 + (pseudo_rand % tilep_parts_total[x]); + + if (x == TILEP_PART_BODY) + { + int p = 0; + int ac = ghost.ac; + ac *= (5 + (pseudo_rand/11) % 11); + ac /= 10; + + if (ac > 25) + p = TILEP_BODY_PLATE_BLACK; + else if (ac > 20) + p = TILEP_BODY_BANDED; + else if (ac > 15) + p = TILEP_BODY_SCALEMAIL; + else if (ac > 10) + p = TILEP_BODY_CHAINMAIL; + else if (ac > 5 ) + p = TILEP_BODY_LEATHER_HEAVY; + else + p = TILEP_BODY_ROBE_BLUE; doll.parts[x] = p; } } @@ -2164,100 +2157,108 @@ void TileGhostInit(const struct ghost_demon &ghost) dam *= (5 + pseudo_rand % 11); dam /= 10; - if (sk == SK_MACES_FLAILS) - { - if (dam>30) p = TILEP_HAND1_GREAT_FRAIL; - else - if (dam>25) p = TILEP_HAND1_GREAT_MACE; - else - if (dam>20) p = TILEP_HAND1_SPIKED_FRAIL; - else - if (dam>15) p = TILEP_HAND1_MORNINGSTAR; + switch (sk) + { + case SK_MACES_FLAILS: + if (dam > 30) + p = TILEP_HAND1_GREAT_FRAIL; + else if (dam > 25) + p = TILEP_HAND1_GREAT_MACE; + else if (dam > 20) + p = TILEP_HAND1_SPIKED_FRAIL; + else if (dam > 15) + p = TILEP_HAND1_MORNINGSTAR; + else if (dam > 10) + p = TILEP_HAND1_FRAIL; + else if (dam > 5) + p = TILEP_HAND1_MACE; else - if (dam>10) p = TILEP_HAND1_FRAIL; - else - if (dam>5) p = TILEP_HAND1_MACE; - else - p = TILEP_HAND1_CLUB_SLANT; + p = TILEP_HAND1_CLUB_SLANT; doll.parts[TILEP_PART_HAND1] = p; - } - else - if (sk == SK_SHORT_BLADES) - { - if (dam>20) p = TILEP_HAND1_SABRE; - else - if (dam>10) p = TILEP_HAND1_SHORT_SWORD_SLANT; + break; + + case SK_SHORT_BLADES: + if (dam > 20) + p = TILEP_HAND1_SABRE; + else if (dam > 10) + p = TILEP_HAND1_SHORT_SWORD_SLANT; else - p = TILEP_HAND1_DAGGER_SLANT; + p = TILEP_HAND1_DAGGER_SLANT; doll.parts[TILEP_PART_HAND1] = p; - } - else - if (sk == SK_LONG_BLADES) - { - if (dam>25) p = TILEP_HAND1_GREAT_SWORD_SLANT; - else - if (dam>20) p = TILEP_HAND1_KATANA_SLANT; - else - if (dam>15) p = TILEP_HAND1_SCIMITAR; - else - if (dam>10) p = TILEP_HAND1_LONG_SWORD_SLANT; + break; + + case SK_LONG_BLADES: + if (dam > 25) + p = TILEP_HAND1_GREAT_SWORD_SLANT; + else if (dam > 20) + p = TILEP_HAND1_KATANA_SLANT; + else if (dam > 15) + p = TILEP_HAND1_SCIMITAR; + else if (dam > 10) + p = TILEP_HAND1_LONG_SWORD_SLANT; else - p = TILEP_HAND1_FALCHION; + p = TILEP_HAND1_FALCHION; doll.parts[TILEP_PART_HAND1] = p; - } - else - if (sk == SK_AXES) - { - if (dam>30) p = TILEP_HAND1_EXECUTIONERS_AXE; + break; + + case SK_AXES: + if (dam > 30) + p = TILEP_HAND1_EXECUTIONERS_AXE; + else if (dam > 20) + p = TILEP_HAND1_BATTLEAXE; + else if (dam > 15) + p = TILEP_HAND1_BROAD_AXE; + else if (dam > 10) + p = TILEP_HAND1_WAR_AXE; else - if (dam>20) p = TILEP_HAND1_BATTLEAXE; - else - if (dam>15) p = TILEP_HAND1_BROAD_AXE; - else - if (dam>10) p = TILEP_HAND1_WAR_AXE; - else - p = TILEP_HAND1_HAND_AXE; + p = TILEP_HAND1_HAND_AXE; doll.parts[TILEP_PART_HAND1] = p; - } - else - if (sk == SK_POLEARMS) - { - if (dam>30) p = TILEP_HAND1_GLAIVE; - else - if (dam>20) p = TILEP_HAND1_SCYTHE; + break; + + case SK_POLEARMS: + if (dam > 30) + p = TILEP_HAND1_GLAIVE; + else if (dam > 20) + p = TILEP_HAND1_SCYTHE; + else if (dam > 15) + p = TILEP_HAND1_HALBERD; + else if (dam > 10) + p = TILEP_HAND1_TRIDENT2; + else if (dam > 10) + p = TILEP_HAND1_HAMMER; else - if (dam>15) p = TILEP_HAND1_HALBERD; - else - if (dam>10) p = TILEP_HAND1_TRIDENT2; - else - if (dam>10) p = TILEP_HAND1_HAMMER; - else - p = TILEP_HAND1_SPEAR; + p = TILEP_HAND1_SPEAR; doll.parts[TILEP_PART_HAND1] = p; - } - else - if (sk == SK_BOWS) + break; + + case SK_BOWS: doll.parts[TILEP_PART_HAND1] = TILEP_HAND1_BOW2; - else - if (sk == SK_CROSSBOWS) + break; + + case SK_CROSSBOWS: doll.parts[TILEP_PART_HAND1] = TILEP_HAND1_CROSSBOW; - else - if (sk == SK_SLINGS) + break; + + case SK_SLINGS: doll.parts[TILEP_PART_HAND1] = TILEP_HAND1_SLING; - else - if (sk == SK_UNARMED_COMBAT) + break; + + case SK_UNARMED_COMBAT: + default: doll.parts[TILEP_PART_HAND1] = doll.parts[TILEP_PART_HAND2] = 0; + break; + } ImgClear(DollCacheImg); // Clear ImgCopyToTileImg(TILE_MONS_PLAYER_GHOST, DollCacheImg, 0, 0, 1); - draw_doll(DollCacheImg, &doll); + _draw_doll(DollCacheImg, &doll); ImgCopyToTileImg(TILE_MONS_PLAYER_GHOST, DollCacheImg, 0, 0, 1, mask, false); redraw_spx_tcache(TILE_MONS_PLAYER_GHOST); } @@ -2314,12 +2315,12 @@ void TileInitItems() typedef struct mcache mcache; struct mcache { - bool lock_flag; - mcache *next; - int mon_tile; - int equ_tile; - int draco; - int idx; + bool lock_flag; + mcache *next; + int mon_tile; + int equ_tile; + int draco; + int idx; }; mcache mc_data[N_MCACHE]; @@ -2337,25 +2338,22 @@ static void ImgCopyDoll(int equ_tile, int hand, int ofs_x, int ofs_y) int wx = std::min(TILE_X/nx + ofs_x, TILE_X/nx); int wy = std::min(TILE_Y/ny + ofs_y, TILE_Y/ny); int idx = equ_tile -1; - int tidx = tilep_parts_start[handidx] + - idx/(nx*ny); + int tidx = tilep_parts_start[handidx] + idx/(nx*ny); //Source pos - int xs = (tidx % TILEP_PER_ROW)*TILE_X + - (idx % nx)*(TILE_X/nx) - ofs_x; - int ys = (tidx / TILEP_PER_ROW)*TILE_Y + - ((idx/nx) % ny)*(TILE_Y/ny) - ofs_y; + int xs = (tidx % TILEP_PER_ROW)*TILE_X + (idx % nx) * (TILE_X/nx) - ofs_x; + int ys = (tidx / TILEP_PER_ROW)*TILE_Y + + ((idx/nx) % ny) * (TILE_Y/ny) - ofs_y; - ImgCopy(PlayerImg, xs, ys, wx, wy, - DollCacheImg, ox, oy, 0); + ImgCopy(PlayerImg, xs, ys, wx, wy, DollCacheImg, ox, oy, 0); } static void mcache_compose(int tile_idx, int mon_tile, int equ_tile) { - int ofs_x=0; - int ofs_y=0; + int ofs_x = 0; + int ofs_y = 0; - switch(mon_tile) + switch (mon_tile) { case TILE_MONS_ORC: case TILE_MONS_URUG: @@ -2489,10 +2487,10 @@ static void mcache_compose_draco(int tile_idx, int race, int cls, int w) int weapon2 = 0; int arm = 0; - for(x = 0; x < TILEP_PARTS_TOTAL; x++) + for (x = 0; x < TILEP_PARTS_TOTAL; x++) { - doll.parts[x] = 0; - current_parts[x] = 0; + doll.parts[x] = 0; + current_parts[x] = 0; } doll.parts[TILEP_PART_SHADOW] = 1; @@ -2553,27 +2551,29 @@ static void mcache_compose_draco(int tile_idx, int race, int cls, int w) doll.parts[TILEP_PART_HAND1] = weapon; doll.parts[TILEP_PART_HAND2] = weapon2; - doll.parts[TILEP_PART_BODY] = armour; - doll.parts[TILEP_PART_LEG] = armour2; - doll.parts[TILEP_PART_ARM] = arm; + doll.parts[TILEP_PART_BODY] = armour; + doll.parts[TILEP_PART_LEG] = armour2; + doll.parts[TILEP_PART_ARM] = arm; ImgClear(DollCacheImg); - draw_doll(DollCacheImg, &doll, true, false); + _draw_doll(DollCacheImg, &doll, true, false); // Copy to the buffer ImgCopyToTileImg(tile_idx, DollCacheImg, 0, 0, 1); redraw_spx_tcache(tile_idx); } -static void mcache_init() +static void _mcache_init() { int i; - for(i=0;imon_tile && equ_tile == mc->equ_tile + while (true) + { + if (mon_tile == mc->mon_tile && equ_tile == mc->equ_tile && draco == mc->draco) { // match found // move cache to the head to reduce future search time - if (prev != NULL) prev->next = mc->next; - if (mc != mc_head) mc->next = mc_head; + if (prev != NULL) + prev->next = mc->next; + if (mc != mc_head) + mc->next = mc_head; mc_head = mc; // lock it @@ -2645,10 +2644,10 @@ int TileMcacheFind(int mon_tile, int equ_tile, int draco) // return cache index return mc->idx; } - else if(draco != 0 && mon_tile == mc->mon_tile && draco == mc->draco) + else if (draco != 0 && mon_tile == mc->mon_tile && draco == mc->draco) // second best for draconian: only weapon differ best2 = mc->idx; - else if(draco != 0 && mon_tile == mc->mon_tile) + else if (draco != 0 && mon_tile == mc->mon_tile) // third best for draconian: only class matches best3 = mc->idx; @@ -2662,21 +2661,22 @@ int TileMcacheFind(int mon_tile, int equ_tile, int draco) #ifdef DEBUG_DIAGNOSTICS count++; #endif - - }//while + } // while // cache image not found and no room do draw it - if(empty == NULL) + if (empty == NULL) { #ifdef DEBUG_DIAGNOSTICS snprintf( cache_info, 39, "mcache (M %d, E %d) cache full", - mon_tile, equ_tile); + mon_tile, equ_tile); mpr(cache_info, MSGCH_DIAGNOSTICS ); #endif if (best2 != -1) return best2; + if (best3 != -1) return best3; + if (draco != 0) return TILE_ERROR; else @@ -2685,9 +2685,9 @@ int TileMcacheFind(int mon_tile, int equ_tile, int draco) mc = empty; #ifdef DEBUG_DIAGNOSTICS - snprintf( cache_info, 39, "mcache (M %d, E %d) newly composed", - mon_tile, equ_tile); - mpr(cache_info, MSGCH_DIAGNOSTICS ); + snprintf( cache_info, 39, "mcache (M %d, E %d) newly composed", + mon_tile, equ_tile); + mpr(cache_info, MSGCH_DIAGNOSTICS ); #endif // compose new image @@ -2696,16 +2696,20 @@ int TileMcacheFind(int mon_tile, int equ_tile, int draco) mcache_compose_draco(mc->idx, draco, mon_tile, equ_tile); else mcache_compose(mc->idx, mon_tile, equ_tile); + mc->mon_tile = mon_tile; mc->equ_tile = equ_tile; mc->draco = draco; + // move cache to the head to reduce future search time if (prev) prev->next = mc->next; - if(mc != mc_head) + if (mc != mc_head) mc->next = mc_head; + mc_head = mc; - mc->lock_flag=true; + mc->lock_flag = true; + return mc->idx; } @@ -2734,9 +2738,7 @@ void TileDrawTitle() tx = winx; } else - { x = (winx - tx)/2; - } if (ty > winy) { @@ -2744,9 +2746,7 @@ void TileDrawTitle() ty = winy; } else - { y = (winy - ty)/2; - } ImgCopy(TitleImg, 0, 0, tx, ty, pBuf, x, y, 1); title.make_active(); @@ -2768,7 +2768,7 @@ static void TilePutch(int c, img_type Dest, int dx, int dy) int sy = (tidx / TILE_PER_ROW)*TILE_Y + (tidx2 / 4)*(TILE_Y/2);; ImgCopy(TileImg, sx, sy, TILE_X/4, TILE_Y/2, - Dest, dx, dy, 0); + Dest, dx, dy, 0); } void TileRedrawInv(int region) @@ -2781,26 +2781,30 @@ void TileRedrawInv(int region) void TileClearInv(int region) { - TileRegionClass *r = (region == REGION_INV1) ? region_item:region_item2; + TileRegionClass *r = (region == REGION_INV1) ? region_item + : region_item2; for (int i = 0; i < r->mx * r->my; i++) { - TileDrawOneItem(region, i, 0, -1, -1, -1, false, false, false, false, false); + TileDrawOneItem(region, i, 0, -1, -1, -1, + false, false, false, false, false); } + last_cursor = -1; itemlist_n = 0; } void TileDrawOneItem(int region, int i, char key, int idx, - int tile, int num, bool floor, - bool select, bool equip, bool tried, bool cursed) + int tile, int num, bool floor, + bool select, bool equip, bool tried, bool cursed) { ASSERT(idx >= -1 && idx < MAX_ITEMS); - TileRegionClass *r = (region == REGION_INV1) ? region_item:region_item2; + TileRegionClass *r = (region == REGION_INV1) ? region_item + : region_item2; int item_x = r->mx; - int dx = (i % item_x)*TILE_X; - int dy = (i / item_x)*TILE_Y; + int dx = (i % item_x) * TILE_X; + int dy = (i / item_x) * TILE_Y; if (tile == -1) { @@ -2817,14 +2821,13 @@ void TileDrawOneItem(int region, int i, char key, int idx, { if (cursed) ImgCopyFromTileImg(TILE_ITEM_SLOT_EQUIP_CURSED, r->backbuf, - dx, dy, 0); + dx, dy, 0); else ImgCopyFromTileImg(TILE_ITEM_SLOT_EQUIP, r->backbuf, dx, dy, 0); } else if (cursed) - { ImgCopyFromTileImg(TILE_ITEM_SLOT_CURSED, r->backbuf, dx, dy, 0); - } + if (select) ImgCopyFromTileImg(TILE_RAY_MESH, r->backbuf, dx, dy, 0); @@ -2843,30 +2846,31 @@ void TileDrawOneItem(int region, int i, char key, int idx, const int offset_amount = TILE_X/4; int offset = 0; + int help = num; - int c100 = help/100; help -= c100*100; + if (c100) { TilePutch('0' + c100, r->backbuf, dx+offset, dy); offset += offset_amount; } + int c10 = help/10; if (c10 || c100) { TilePutch('0' + c10, r->backbuf, dx+offset, dy); offset += offset_amount; } + int c1 = help % 10; TilePutch('0' + c1, r->backbuf, dx+offset, dy); } // '?' mark if (tried) - { TilePutch('?', r->backbuf, dx, dy + TILE_Y/2); - } // record tile information as we draw it so that we can re-draw it at will itemlist[i] = tile; @@ -2874,6 +2878,7 @@ void TileDrawOneItem(int region, int i, char key, int idx, itemlist_key[i] = key; itemlist_idx[i] = idx; itemlist_iflag[i] = 0; + if (floor) itemlist_iflag[i] |= TILEI_FLAG_FLOOR; if (tried) @@ -2890,7 +2895,7 @@ void TileDrawOneItem(int region, int i, char key, int idx, } void TileDrawInvData(int n, int flag, int *tiles, int *num, int *idx, - int *iflags) + int *iflags) { int i; TileRegionClass *r = (flag == REGION_INV1) ? region_item:region_item2; @@ -2904,13 +2909,15 @@ void TileDrawInvData(int n, int flag, int *tiles, int *num, int *idx, int item_x = r->mx; int item_y = r->my; - for (i=0;i=n) ? -1 : tiles[i]; int idx0 = (i>=n) ? -1 : idx[i]; - char key = (iflags[i]&TILEI_FLAG_FLOOR) ? 0 : index_to_letter(idx[i]); + char key = (iflags[i] & TILEI_FLAG_FLOOR) ? 0 + : index_to_letter(idx[i]); if ( flag == itemlist_flag && tile0 == itemlist[i] @@ -2925,11 +2932,11 @@ void TileDrawInvData(int n, int flag, int *tiles, int *num, int *idx, } TileDrawOneItem(flag, i, key, idx0, tile0, num[i], - ((iflags[i]&TILEI_FLAG_FLOOR) != 0), - ((iflags[i]&TILEI_FLAG_SELECT) != 0), - ((iflags[i]&TILEI_FLAG_EQUIP) != 0), - ((iflags[i]&TILEI_FLAG_TRIED) != 0), - ((iflags[i]&TILEI_FLAG_CURSE) != 0)); + ((iflags[i]&TILEI_FLAG_FLOOR) != 0), + ((iflags[i]&TILEI_FLAG_SELECT) != 0), + ((iflags[i]&TILEI_FLAG_EQUIP) != 0), + ((iflags[i]&TILEI_FLAG_TRIED) != 0), + ((iflags[i]&TILEI_FLAG_CURSE) != 0)); } r->make_active(); @@ -2941,7 +2948,8 @@ void TileDrawInvData(int n, int flag, int *tiles, int *num, int *idx, void TileDrawInvCursor(int ix, bool flag) { TileRegionClass *r = - (itemlist_flag == REGION_INV1) ? region_item:region_item2; + (itemlist_flag == REGION_INV1) ? region_item + : region_item2; int tile0 = itemlist[ix]; int num0 = itemlist_num[ix]; @@ -2952,12 +2960,11 @@ void TileDrawInvCursor(int ix, bool flag) itemlist_iflag[ix] &= ~TILEI_FLAG_CURSOR; TileDrawOneItem(itemlist_flag, ix, itemlist_key[ix], itemlist_idx[ix], tile0, num0, - ((itemlist_iflag[ix]&TILEI_FLAG_FLOOR) != 0), - ((itemlist_iflag[ix]&TILEI_FLAG_SELECT) != 0), - ((itemlist_iflag[ix]&TILEI_FLAG_EQUIP) != 0), - ((itemlist_iflag[ix]&TILEI_FLAG_TRIED) != 0), - ((itemlist_iflag[ix]&TILEI_FLAG_CURSE) != 0) - ); + ((itemlist_iflag[ix]&TILEI_FLAG_FLOOR) != 0), + ((itemlist_iflag[ix]&TILEI_FLAG_SELECT) != 0), + ((itemlist_iflag[ix]&TILEI_FLAG_EQUIP) != 0), + ((itemlist_iflag[ix]&TILEI_FLAG_TRIED) != 0), + ((itemlist_iflag[ix]&TILEI_FLAG_CURSE) != 0)); r->redraw(); } @@ -2967,7 +2974,9 @@ void TileMoveInvCursor(int ix) if (last_cursor != -1) TileDrawInvCursor(last_cursor, false); - if (ix != -1) TileDrawInvCursor(ix, true); + if (ix != -1) + TileDrawInvCursor(ix, true); + last_cursor = ix; } -- cgit v1.2.3-54-g00ecf