summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source
diff options
context:
space:
mode:
authorj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2008-03-23 14:30:29 +0000
committerj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2008-03-23 14:30:29 +0000
commit0af59f5d233f429a70df12e87993f7bda7de30a7 (patch)
tree37baf239dd33ab9ca033d170d60ef6665e08f612 /crawl-ref/source
parent7b2c4078bbab85c54058384d35c55f1bed19ab21 (diff)
downloadcrawl-ref-0af59f5d233f429a70df12e87993f7bda7de30a7.tar.gz
crawl-ref-0af59f5d233f429a70df12e87993f7bda7de30a7.zip
Introduce a temporary neutral brand for tiles because it was driving me nuts
when testing Ely's pacifying. (Currently only inappropriately reuses TILE_NEW_STAIR, which will have to be replaced with something more distinctive some time.) Also add an option for colouring neutrals on the minimap (defaults to red, like hostiles) and allow secondary item use by Ctrl-L-clicking on items in inventory (firing weapons, unwielding rods, etc.) git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@3830 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source')
-rw-r--r--crawl-ref/source/externs.h1
-rw-r--r--crawl-ref/source/initfile.cc6
-rw-r--r--crawl-ref/source/item_use.cc26
-rw-r--r--crawl-ref/source/libgui.cc96
-rw-r--r--crawl-ref/source/libgui.h3
-rw-r--r--crawl-ref/source/tile1.cc5
-rw-r--r--crawl-ref/source/tile2.cc8
-rw-r--r--crawl-ref/source/tiles.h17
8 files changed, 113 insertions, 49 deletions
diff --git a/crawl-ref/source/externs.h b/crawl-ref/source/externs.h
index 7c510225d3..89aa78bb2b 100644
--- a/crawl-ref/source/externs.h
+++ b/crawl-ref/source/externs.h
@@ -1766,6 +1766,7 @@ public:
// minimap colours
char tile_player_col;
char tile_monster_col;
+ char tile_neutral_col;
char tile_friendly_col;
char tile_item_col;
char tile_unseen_col;
diff --git a/crawl-ref/source/initfile.cc b/crawl-ref/source/initfile.cc
index 8109534c03..f7e9e6bb67 100644
--- a/crawl-ref/source/initfile.cc
+++ b/crawl-ref/source/initfile.cc
@@ -805,6 +805,7 @@ void game_options::reset_options()
// minimap colours
tile_player_col = MAP_WHITE;
tile_monster_col = MAP_RED;
+ tile_neutral_col = MAP_RED;
tile_friendly_col = MAP_LTRED;
tile_item_col = MAP_GREEN;
tile_unseen_col = MAP_BLACK;
@@ -2731,6 +2732,11 @@ void game_options::read_option_line(const std::string &str, bool runscript)
tile_monster_col =
str_to_tile_colour(field);
}
+ else if (key == "tile_neutral_col")
+ {
+ tile_neutral_col =
+ str_to_tile_colour(field);
+ }
else if (key == "tile_friendly_col")
{
tile_friendly_col =
diff --git a/crawl-ref/source/item_use.cc b/crawl-ref/source/item_use.cc
index 2bc815bccf..b304a06545 100644
--- a/crawl-ref/source/item_use.cc
+++ b/crawl-ref/source/item_use.cc
@@ -4687,10 +4687,27 @@ void tile_use_item(int idx, InvAction act)
}
return;
}
- else if (act != INV_USE)
+ else if (act == INV_USE2) // secondary item use
{
+ if (you.inv[idx].base_type == OBJ_WEAPONS
+ && is_throwable(you.inv[idx], player_size(PSIZE_BODY)))
+ {
+ fire_thing(idx); // fire weapons
+ }
+ else if (you.inv[idx].base_type == OBJ_MISCELLANY
+ || you.inv[idx].base_type == OBJ_STAVES
+ && item_is_rod(you.inv[idx])) // unwield rods/misc. items
+ {
+ if (you.equip[EQ_WEAPON] == idx
+ && check_warning_inscriptions(you.inv[idx], OPER_WIELD))
+ {
+ wield_weapon(true, PROMPT_GOT_SPECIAL); // unwield
+ }
+ }
return;
}
+ else if (act != INV_USE)
+ return;
// Equipped?
bool equipped = false;
@@ -4737,15 +4754,14 @@ void tile_use_item(int idx, InvAction act)
wield_weapon(true, idx);
return;
}
- // evoke misc. items and known rods
- if (type == OBJ_MISCELLANY
- ||item_is_rod(you.inv[idx]) && item_type_known(you.inv[idx]))
+ // evoke misc. items and rods
+ if (type == OBJ_MISCELLANY || item_is_rod(you.inv[idx]))
{
if (check_warning_inscriptions(you.inv[idx], OPER_EVOKE))
evoke_wielded();
return;
}
- // unwield unknown rods, other staves or weapons
+ // unwield staves or weapons
if (check_warning_inscriptions(you.inv[idx], OPER_WIELD))
wield_weapon(true, PROMPT_GOT_SPECIAL); // unwield
return;
diff --git a/crawl-ref/source/libgui.cc b/crawl-ref/source/libgui.cc
index 56343fdaa3..c6177d9b63 100644
--- a/crawl-ref/source/libgui.cc
+++ b/crawl-ref/source/libgui.cc
@@ -356,10 +356,15 @@ void GmapUpdate(int x, int y, int what, bool upd_tile)
if (x == you.x_pos && y == you.y_pos)
c = Options.tile_player_col; // player position always highlighted
- else if (mgrd[x][y] != NON_MONSTER && mons_friendly(&menv[mgrd[x][y]])
- && upd_tile)
+ else if (mgrd[x][y] != NON_MONSTER && upd_tile)
{
- c = Options.tile_friendly_col; // friendly monsters subtly different from hostiles
+ if (mons_friendly(&menv[mgrd[x][y]]))
+ c = Options.tile_friendly_col; // colour friendly monsters
+ else if (mons_neutral(&menv[mgrd[x][y]])
+ && Options.tile_neutral_col != Options.tile_monster_col)
+ {
+ c = Options.tile_neutral_col; // colour neutral monsters
+ }
}
else
{
@@ -1333,20 +1338,26 @@ static int handle_mouse_motion(int mouse_x, int mouse_y, bool init)
case OBJ_STAVES:
case OBJ_MISCELLANY:
desc += "Wield (w)";
+ if (is_throwable(you.inv[ix], player_size(PSIZE_BODY)))
+ desc += EOL "[Ctrl-L-Click] Fire (f)";
break;
case OBJ_WEAPONS + 18:
desc += "Unwield";
+ if (is_throwable(you.inv[ix], player_size(PSIZE_BODY)))
+ desc += EOL "[Ctrl-L-Click] Fire (f)";
break;
case OBJ_MISCELLANY + 18:
if (you.inv[ix].sub_type >= MISC_DECK_OF_ESCAPE
&& you.inv[ix].sub_type <= MISC_DECK_OF_DEFENCE)
{
desc += "Draw a card (E)";
+ desc += EOL "[Ctrl-L-Click] Unwield";
break;
}
// else fall-through
case OBJ_STAVES + 18: // rods - other staves handled above
desc += "Evoke (E)";
+ desc += EOL "[Ctrl-L-Click] Unwield";
break;
case OBJ_ARMOUR:
desc += "Wear (W)";
@@ -1533,10 +1544,15 @@ static int handle_mouse_button(int mx, int my, int button,
const int cmd_dir[9]={'1','2','3','4','5','6','7','8','9'};
int trig = CK_MOUSE_B1;
- if (button == 2) trig = CK_MOUSE_B2;
- if (button == 3) trig = CK_MOUSE_B3;
- if (button == 4) trig = CK_MOUSE_B4;
- if (button == 5) trig = CK_MOUSE_B5;
+ if (button == 2)
+ trig = CK_MOUSE_B2;
+ else if (button == 3)
+ trig = CK_MOUSE_B3;
+ else if (button == 4)
+ trig = CK_MOUSE_B4;
+ else if (button == 5)
+ trig = CK_MOUSE_B5;
+
if (shift) trig |= 512;
if (ctrl) trig |= 1024;
@@ -1608,6 +1624,7 @@ static int handle_mouse_button(int mx, int my, int button,
}
else
gui_set_mouse_inv(ix, INV_VIEW);
+
TileMoveInvCursor(-1);
return CK_MOUSE_B2ITEM;
}
@@ -1621,13 +1638,18 @@ static int handle_mouse_button(int mx, int my, int button,
gui_set_mouse_inv(ix, INV_PICKUP);
else
gui_set_mouse_inv(ix, INV_USE_FLOOR);
+
return CK_MOUSE_B1ITEM;
}
+
// use item
if (shift)
gui_set_mouse_inv(ix, INV_DROP);
+ else if (ctrl)
+ gui_set_mouse_inv(ix, INV_USE2);
else
gui_set_mouse_inv(ix, INV_USE);
+
return CK_MOUSE_B1ITEM;
}
}
@@ -1698,9 +1720,9 @@ static int handle_mouse_button(int mx, int my, int button,
// first, check if 3x3 grid around @ is clicked.
// if so, return equivalent numpad key
int adir = -1;
- for(dir=0;dir<9;dir++)
+ for (dir = 0; dir < 9; dir++)
{
- if( DCX+dx[dir] == cx && DCY+dy[dir]==cy)
+ if (DCX+dx[dir] == cx && DCY+dy[dir]==cy)
{
adir = dir;
break;
@@ -1713,20 +1735,23 @@ static int handle_mouse_button(int mx, int my, int button,
return cmd_s[adir];
else if (ctrl)
return cmd_c[adir];
- else return cmd_n[dir];
+ else
+ return cmd_n[dir];
}
- if (button != 1) return trig;
+ if (button != 1)
+ return trig;
// otherwise travel to that grid
const coord_def gc = view2grid(coord_def(cx+1, cy+1));
- if (!map_bounds(gc)) return 0;
+ if (!map_bounds(gc))
+ return 0;
// Activate travel
start_travel(gc.x, gc.y);
return CK_MOUSE_DONE;
}
- if(mouse_mode==MOUSE_MODE_COMMAND && mode == REGION_MAP)
+ if (mouse_mode==MOUSE_MODE_COMMAND && mode == REGION_MAP)
{
// begin telescope mode
if (button == 2)
@@ -1741,7 +1766,8 @@ static int handle_mouse_button(int mx, int my, int button,
// L-click: try to travel to the grid
const coord_def gc(cx-1, cy-1);
- if (!map_bounds(gc)) return 0;
+ if (!map_bounds(gc))
+ return 0;
// Activate travel
start_travel(gc.x, gc.y);
@@ -1762,12 +1788,10 @@ static int handle_mouse_button(int mx, int my, int button,
(mode == REGION_DNGN || mode == REGION_TDNGN))
{
if (cx < DCX-1 || cy < DCY-1 || cx > DCX+1 || cy > DCY+1) return 0;
- for(dir=0;dir<9;dir++)
+ for (dir = 0; dir < 9; dir++)
{
if( DCX+dx[dir] == cx && DCY+dy[dir]==cy)
- {
return cmd_dir[dir];
- }
}
return 0;
}
@@ -1794,34 +1818,35 @@ int getch_ck()
bool sh, ct;
int k;
- while(1)
- {
- k = 0;
- GetNextEvent(&etype, &key, &sh, &ct, &x1, &y1, &x2, &y2);
- switch(etype)
+ while (true)
{
+ k = 0;
+ GetNextEvent(&etype, &key, &sh, &ct, &x1, &y1, &x2, &y2);
+ switch(etype)
+ {
case EV_BUTTON:
k = handle_mouse_button(x1, y1, key, sh, ct);
- break;
+ break;
case EV_MOVE:
k = handle_mouse_motion(x1, y1, false);
- break;
+ break;
case EV_UNBUTTON:
k = handle_mouse_unbutton(x1, y1, key);
- break;
+ break;
case EV_KEYIN:
k = key;
- break;
+ break;
default:
- break;
- } // switch
+ break;
+ }
- if (k != 0) break;
- }/*while*/
+ if (k != 0)
+ break;
+ }
return k;
}
@@ -1867,8 +1892,9 @@ int mouse_get_mode()
return mouse_mode;
}
-void gui_init_view_params(coord_def &termsz, coord_def &viewsz,
- coord_def &msgp, coord_def &msgsz, coord_def &hudp, coord_def &hudsz)
+void gui_init_view_params(coord_def &termsz, coord_def &viewsz,
+ coord_def &msgp, coord_def &msgsz,
+ coord_def &hudp, coord_def &hudsz)
{
// TODO enne - set these other params too?
msgsz.x = msg_x;
@@ -1899,19 +1925,23 @@ void clrscr()
// clear Text regions
if (!region_lock[REGION_CRT])
region_crt->clear();
+
if (region_msg && !region_lock[REGION_MSG])
region_msg->clear();
+
if (region_stat && !region_lock[REGION_STAT])
region_stat->clear();
+
if (region_dngn && !region_lock[REGION_TDNGN])
region_dngn->clear();
+
if (region_tip && !region_lock[REGION_TIP])
region_tip->clear();
// Hack: Do not erase the backbuffer. Instead just hide it.
if (region_map)
{
- if(region_lock[REGION_MAP])
+ if (region_lock[REGION_MAP])
region_map->redraw();
else
region_map->flag = false;
diff --git a/crawl-ref/source/libgui.h b/crawl-ref/source/libgui.h
index 2fec6447ab..231eb2508d 100644
--- a/crawl-ref/source/libgui.h
+++ b/crawl-ref/source/libgui.h
@@ -80,7 +80,8 @@ bool gui_get_mouse_grid_pos(coord_def &gc);
enum InvAction
{
INV_DROP,
- INV_USE,
+ INV_USE, // primary inventory use
+ INV_USE2, // secondary inventory use
INV_PICKUP,
INV_VIEW,
INV_USE_FLOOR,
diff --git a/crawl-ref/source/tile1.cc b/crawl-ref/source/tile1.cc
index 99e1e6fd67..9284b1f0bf 100644
--- a/crawl-ref/source/tile1.cc
+++ b/crawl-ref/source/tile1.cc
@@ -816,6 +816,10 @@ int tileidx_monster(int mon_idx, bool detected)
{
ch |= TILE_FLAG_PET;
}
+ else if (mons_neutral(mons))
+ {
+ ch |= TILE_FLAG_NEUTRAL;
+ }
else if (mons_looks_stabbable(mons))
{
ch |= TILE_FLAG_STAB;
@@ -824,7 +828,6 @@ int tileidx_monster(int mon_idx, bool detected)
{
ch |= TILE_FLAG_MAY_STAB;
}
-
return ch;
}
diff --git a/crawl-ref/source/tile2.cc b/crawl-ref/source/tile2.cc
index 7926afcc67..a428ed3157 100644
--- a/crawl-ref/source/tile2.cc
+++ b/crawl-ref/source/tile2.cc
@@ -746,6 +746,12 @@ void tcache_compose_normal(int ix, int *fg, int *bg)
tcache_overlay(tc_img, ix, TILE_HEART, TREGION_0_NORMAL, &c, NULL);
status_shift += 10;
}
+ else if ((fg0 & TILE_FLAG_MAY_STAB) == TILE_FLAG_NEUTRAL)
+ {
+ // FIX ME: add real neutral marker!
+ tcache_overlay(tc_img, ix, TILE_NEW_STAIR, TREGION_0_NORMAL, &c, NULL);
+ status_shift += 10;
+ }
else if ((fg0 & TILE_FLAG_MAY_STAB) == TILE_FLAG_STAB)
{
tcache_overlay(tc_img, ix, TILE_STAB_BRAND, TREGION_0_NORMAL, &c, NULL);
@@ -757,7 +763,7 @@ void tcache_compose_normal(int ix, int *fg, int *bg)
NULL);
status_shift += 5;
}
-
+
if (fg0 & TILE_FLAG_POISON)
{
tcache_overlay(tc_img, ix, TILE_POISON, TREGION_0_NORMAL, &c, NULL,
diff --git a/crawl-ref/source/tiles.h b/crawl-ref/source/tiles.h
index c45324242e..3ccf159829 100644
--- a/crawl-ref/source/tiles.h
+++ b/crawl-ref/source/tiles.h
@@ -142,19 +142,20 @@ enum tile_flags
// Foreground flags
TILE_FLAG_S_UNDER = 0x00000800,
TILE_FLAG_FLYING = 0x00001000,
- TILE_FLAG_NET = 0x00002000,
- TILE_FLAG_PET = 0x00004000,
+ TILE_FLAG_PET = 0x00002000,
+ TILE_FLAG_NEUTRAL = 0x00004000,
TILE_FLAG_STAB = 0x00008000,
TILE_FLAG_MAY_STAB = 0x0000C000,
- TILE_FLAG_POISON = 0x00010000,
+ TILE_FLAG_NET = 0x00010000,
+ TILE_FLAG_POISON = 0x00020000,
// Background flags
TILE_FLAG_RAY = 0x00000800,
- TILE_FLAG_MM_UNSEEN = 0x00001000,
- TILE_FLAG_UNSEEN = 0x00002000,
- TILE_FLAG_CURSOR0 = 0x00000000,
- TILE_FLAG_CURSOR1 = 0x00008000,
- TILE_FLAG_CURSOR2 = 0x00004000,
+ TILE_FLAG_MM_UNSEEN = 0x00000000,
+ TILE_FLAG_UNSEEN = 0x00001000,
+ TILE_FLAG_CURSOR0 = 0x00002000,
+ TILE_FLAG_CURSOR1 = 0x00004000,
+ TILE_FLAG_CURSOR2 = 0x00008000,
TILE_FLAG_CURSOR3 = 0x0000C000,
TILE_FLAG_CURSOR = 0x0000C000,
TILE_FLAG_BLOOD = 0x00010000,