git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1925 c06c8d41-db1a-0410-9941-cceddc491573
WT66JDIRTLLP37SHTV4GI3V64JFJ4D25LNRLGCHFG6CLEFKJ3QGQC KYGKLJ3SYIIDSHRSFQUZCDHUIFU7D7EB6QIPIWGCWIAWZCLLUAIAC 4D4TJWFTQ74TBNJYW42CP3UYIQT4Q22IO7N34UOBUE3Y6RICHEJAC WG6O475IOLZFMUQSLVR2KHM7XTBF5HH276L2KDGF7UOSESDOAILQC UOW2X5KTUHYCM73SWNOSJPHUKWVLF3OJTNSISSSENEURBX2XWHVQC K2MLPJIAXXZRWEWZCNSGICCBNIU2WAAPT7SPIMOH7FLLTOB4QFRAC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC PFEJ4LMDNEKLMGRCMWQ7EIRVU4JMYGICI4G7X4WVWOROVXQCBZ7QC X3RDT655FEYO6XEVPIUAPEPJZAFE55KZBH2AZOLK3NGHINMVIGFQC CQ24AVAI6SW3AHTIDMLPSTRRBEU6FHRF5I5FD6G5QIYE6PO4BQMQC SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC AXQJOPTECRU3ECV3ICDUR6SGBIOIZT5HIOSJ77MRLF5ECGOITMDQC ZP2KE7A2LE7Z2S7AC45WE4CXDSEVDTWIMV2EM4IBUKXYJIDU6R7QC DODCHP2S4I6VZKQAVXX6D76OPNFI2YWZ4XH3HZTMAJZXA2RJ3XRQC CDKRLJIGVWQE2PMHCSLJBLYQEK7JYC4LQM7H2X3O6NMJMCCDRVIAC IPQ63XIUPHFMCQOZZAVSGCJOZFDRDWZTUUJSAUMARNDUFLBEMYIAC NNG27Y5ZQAZX6UD7F7M4F6KEZBEDFXPEEC3LFUSX4ESKT7K6UJQAC E5DMZFW6WCFAKTKKOQPYTQXZ2CGLWMVH64LRXDUI2UIG4VYUHIVQC MSQI3TH6T62JAXQGLL52QZCWAMC372TGB6ZNNRDGUGMJKBNNV2VAC CEK6M777MI5JVDC3KHE3JD3FETVSJ4VN6DGATBI5P3O6P5XHY4DAC X5WLJCJVW55SXZVP7IKP7ADCJIGNKN4PKAXFECVR6TNK7XSMZR7QC 77H4BWWPPGLM3PLZH4QTAJRXIZTSDVNCOKZE223I437FN2UJ34RQC SW3RLYFNRT3IJBK6LYKHKP2J2YDU7SXQWAJZX7U6S7ICYW43OMNQC R22TTMI6WXWULC7ODKFF3QCB7MOTETQQ6IR4BUCUPOCQKQNCTT5AC TZ643KHSE5CUPXFSQ7VYVOCM5MTQ7F4SENEYQX2RNFHGHLQVS3RQC // last updated 12may2000 {dlb}/* ************************************************************************ called from: acr* *********************************************************************** */void viewwindow2(char draw_it, bool do_updates);// last updated 12may2000 {dlb}/* ************************************************************************ called from: acr* *********************************************************************** */void viewwindow3(char draw_it, bool do_updates); // non-IBM graphics
}inline static bool update_monster_grid(const monsters *monster){const int ex = monster->x - you.x_pos + 9;const int ey = monster->y - you.y_pos + 9;if (!player_monster_visible( monster )){// ripple effect?if (grd[monster->x][monster->y] == DNGN_SHALLOW_WATER&& !mons_flies(monster)&& env.cgrid(monster->pos()) == EMPTY_CLOUD){set_show_backup(ex, ey);env.show[ex][ey] = DNGN_INVIS_EXPOSED;env.show_col[ex][ey] = BLUE;}return (false);}// mimics are always left on mapif (!mons_is_mimic( monster->type ))set_show_backup(ex, ey);env.show[ex][ey] = monster->type + DNGN_START_OF_MONSTERS;env.show_col[ex][ey] = get_mons_colour( monster );return (true);
const int ex = monster->x - you.x_pos + 9;const int ey = monster->y - you.y_pos + 9;if (!player_monster_visible( monster )){// ripple effect?if (grd[monster->x][monster->y] == DNGN_SHALLOW_WATER&& !mons_flies(monster)&& env.cgrid(monster->pos()) == EMPTY_CLOUD){set_show_backup(ex, ey);env.show[ex][ey] = DNGN_INVIS_EXPOSED;env.show_col[ex][ey] = BLUE;}
if (!update_monster_grid(monster))
inline static void update_item_grid(const coord_def &gp, const coord_def &ep){const item_def &eitem = mitm[igrd(gp)];unsigned short &ecol = env.show_col(ep);const dungeon_feature_type grid = grd(gp);if (Options.stair_item_brand && is_stair(grid))ecol |= COLFLAG_STAIR_ITEM;else{ecol = (grid == DNGN_SHALLOW_WATER)? CYAN : eitem.colour;if (eitem.link != NON_ITEM)ecol |= COLFLAG_ITEM_HEAP;env.show(ep) = get_item_dngn_code( eitem );}}
const int ix = count_x - you.x_pos + 9;const int iy = count_y - you.y_pos + 9;if (env.show[ix][iy]){const item_def &eitem = mitm[igrd[count_x][count_y]];unsigned short &ecol = env.show_col[ix][iy];const dungeon_feature_type grid = grd[count_x][count_y];if (Options.stair_item_brand && is_stair(grid))ecol |= COLFLAG_STAIR_ITEM;else{ecol = (grid == DNGN_SHALLOW_WATER)?CYAN: eitem.colour;if (eitem.link != NON_ITEM){ecol |= COLFLAG_ITEM_HEAP;}env.show[ix][iy] = get_item_dngn_code( eitem );}}
const coord_def ep = gp - you.pos() + coord_def(9, 9);if (env.show(ep))update_item_grid(gp, ep);
}inline static void update_cloud_grid(int cloudno){int which_colour = LIGHTGREY;const int ex = env.cloud[cloudno].x - you.x_pos + 9;const int ey = env.cloud[cloudno].y - you.y_pos + 9;switch (env.cloud[cloudno].type){case CLOUD_FIRE:if (env.cloud[cloudno].decay <= 20)which_colour = RED;else if (env.cloud[cloudno].decay <= 40)which_colour = LIGHTRED;else if (one_chance_in(4))which_colour = RED;else if (one_chance_in(4))which_colour = LIGHTRED;elsewhich_colour = YELLOW;break;case CLOUD_STINK:which_colour = GREEN;break;case CLOUD_COLD:if (env.cloud[cloudno].decay <= 20)which_colour = BLUE;else if (env.cloud[cloudno].decay <= 40)which_colour = LIGHTBLUE;else if (one_chance_in(4))which_colour = BLUE;else if (one_chance_in(4))which_colour = LIGHTBLUE;elsewhich_colour = WHITE;break;case CLOUD_POISON:which_colour = (one_chance_in(3) ? LIGHTGREEN : GREEN);break;case CLOUD_BLUE_SMOKE:which_colour = LIGHTBLUE;break;case CLOUD_PURP_SMOKE:which_colour = MAGENTA;break;case CLOUD_MIASMA:case CLOUD_BLACK_SMOKE:which_colour = DARKGREY;break;case CLOUD_MIST:which_colour = EC_MIST;break;default:which_colour = LIGHTGREY;break;}set_show_backup(ex, ey);env.show[ex][ey] = DNGN_CLOUD;env.show_col[ex][ey] = which_colour;
{const int ex = env.cloud[s].x - you.x_pos + 9;const int ey = env.cloud[s].y - you.y_pos + 9;switch (env.cloud[s].type){case CLOUD_FIRE:if (env.cloud[s].decay <= 20)which_colour = RED;else if (env.cloud[s].decay <= 40)which_colour = LIGHTRED;else if (one_chance_in(4))which_colour = RED;else if (one_chance_in(4))which_colour = LIGHTRED;elsewhich_colour = YELLOW;break;case CLOUD_STINK:which_colour = GREEN;break;
update_cloud_grid(s);}}}
case CLOUD_COLD:if (env.cloud[s].decay <= 20)which_colour = BLUE;else if (env.cloud[s].decay <= 40)which_colour = LIGHTBLUE;else if (one_chance_in(4))which_colour = BLUE;else if (one_chance_in(4))which_colour = LIGHTBLUE;elsewhich_colour = WHITE;break;case CLOUD_POISON:which_colour = (one_chance_in(3) ? LIGHTGREEN : GREEN);break;case CLOUD_BLUE_SMOKE:which_colour = LIGHTBLUE;break;case CLOUD_PURP_SMOKE:which_colour = MAGENTA;break;case CLOUD_MIASMA:case CLOUD_BLACK_SMOKE:which_colour = DARKGREY;break;case CLOUD_MIST:which_colour = EC_MIST;break;default:which_colour = LIGHTGREY;break;}set_show_backup(ex, ey);env.show[ex][ey] = DNGN_CLOUD;env.show_col[ex][ey] = which_colour;}} // end 'if != CLOUD_NONE'} // end 'for s' loop} // end cloud_grid()
static void update_env_show(const coord_def &gp, const coord_def &ep){// The sequence is grid, items, clouds, monsters.env.show(ep) = grd(gp);env.show_col(ep) = 0;if (igrd(gp) != NON_ITEM)update_item_grid(gp, ep);const int cloud = env.cgrid(gp);if (cloud != EMPTY_CLOUD && env.cloud[cloud].type != CLOUD_NONE)update_cloud_grid(cloud);const monsters *mons = monster_at(gp);if (mons && mons->alive())update_monster_grid(mons);}// Updates one square of the view area. Should only be called for square// in LOS.void view_update_at(const coord_def &pos){if (pos == you.pos())return;const coord_def vp = grid2view(pos);const coord_def ep = view2show(vp);update_env_show(pos, ep);int object = env.show(ep);if (!object)return;unsigned short colour = env.show_col(ep);unsigned ch = 0;if (object == DNGN_SECRET_DOOR)object = grid_secret_door_appearance( pos.x, pos.y );get_symbol( pos.x, pos.y, object, &ch, &colour );int flash_colour = you.flash_colour;if (flash_colour == BLACK)flash_colour = viewmap_flash_colour();gotoxy(vp.x, vp.y);textcolor(flash_colour? flash_colour : colour);putwch(ch);}bool view_update(){if (you.num_turns > you.last_view_update){viewwindow(true, false);return (true);}return (false);}
bool monsters::has_action_energy() const{return (speed_increment >= 80);}void monsters::check_redraw(const coord_def &old) const{const bool see_new = see_grid(pos());const bool see_old = see_grid(old);if ((see_new || see_old) && !view_update()){if (see_new)view_update_at(pos());if (see_old)view_update_at(old);update_screen();}}