Make use space cancellable by keyboard and reimplement the bash/lockpick keyboard shortcuts (allowing you to bypass the usual dialog)
This commit is contained in:
@@ -138,6 +138,7 @@ short monst_place_count = 0; // 1 - standard place 2 - place last
|
|||||||
RECT shopping_rects[8][7];
|
RECT shopping_rects[8][7];
|
||||||
std::queue<pending_special_type> special_queue;
|
std::queue<pending_special_type> special_queue;
|
||||||
bool end_scenario = false;
|
bool end_scenario = false;
|
||||||
|
bool current_bash_is_bash = false;
|
||||||
|
|
||||||
void init_screen_locs() ////
|
void init_screen_locs() ////
|
||||||
{
|
{
|
||||||
@@ -630,6 +631,27 @@ static void handle_use_space(location destination, bool& did_something, bool& ne
|
|||||||
put_item_screen(stat_window,0);
|
put_item_screen(stat_window,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void handle_bash_pick(location destination, bool& did_something, bool& need_redraw, bool isBash) {
|
||||||
|
if(!adjacent(destination,univ.town.p_loc))
|
||||||
|
add_string_to_buf(" Must be adjacent. ");
|
||||||
|
else {
|
||||||
|
short pc = char_select_pc(true, false, isBash ? "Who will bash?" : "Who will pick the lock?");
|
||||||
|
if(pc == 6) {
|
||||||
|
add_string_to_buf(" Cancelled");
|
||||||
|
overall_mode = MODE_TOWN;
|
||||||
|
need_redraw = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(isBash) bash_door(destination, pc);
|
||||||
|
else pick_lock(destination, pc);
|
||||||
|
}
|
||||||
|
did_something = true;
|
||||||
|
overall_mode = MODE_TOWN;
|
||||||
|
need_redraw = true;
|
||||||
|
put_pc_screen();
|
||||||
|
put_item_screen(stat_window,0);
|
||||||
|
}
|
||||||
|
|
||||||
static void handle_switch_pc(short which_pc) {
|
static void handle_switch_pc(short which_pc) {
|
||||||
char str[256];
|
char str[256];
|
||||||
if(!prime_time() && overall_mode != MODE_SHOPPING && overall_mode != MODE_TALKING)
|
if(!prime_time() && overall_mode != MODE_SHOPPING && overall_mode != MODE_TALKING)
|
||||||
@@ -961,10 +983,8 @@ bool handle_action(sf::Event event) {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// TODO: The inclusion of DROP in this and the following case may be incorrect.
|
case MODE_TOWN: case MODE_TALK_TOWN: case MODE_TOWN_TARGET: case MODE_USE_TOWN: case MODE_LOOK_TOWN:
|
||||||
case MODE_TOWN: case MODE_TALK_TOWN: case MODE_TOWN_TARGET: case MODE_USE_TOWN: case MODE_LOOK_TOWN: case MODE_DROP_TOWN:
|
case MODE_DROP_TOWN: case MODE_BASH_TOWN:
|
||||||
// I think 5 is "town drop"
|
|
||||||
// cur_loc = c_town.p_loc;
|
|
||||||
cur_loc = center;
|
cur_loc = center;
|
||||||
for(int i = 0; i < 8; i++)
|
for(int i = 0; i < 8; i++)
|
||||||
if(the_point.in(town_buttons[i])) {
|
if(the_point.in(town_buttons[i])) {
|
||||||
@@ -1177,6 +1197,13 @@ bool handle_action(sf::Event event) {
|
|||||||
destination.y += j - 4;
|
destination.y += j - 4;
|
||||||
handle_use_space(destination, did_something, need_redraw);
|
handle_use_space(destination, did_something, need_redraw);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Bashing/lockpicking
|
||||||
|
else if(overall_mode == MODE_BASH_TOWN) {
|
||||||
|
destination.x += i - 4;
|
||||||
|
destination.y += j - 4;
|
||||||
|
handle_bash_pick(destination, did_something, need_redraw, current_bash_is_bash);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// MARK: End: click in terrain
|
// MARK: End: click in terrain
|
||||||
|
|
||||||
@@ -1332,6 +1359,17 @@ bool handle_action(sf::Event event) {
|
|||||||
// MARK: Fake clicks (alchemy, town rest)
|
// MARK: Fake clicks (alchemy, town rest)
|
||||||
if(the_point.x == 1000) handle_alchemy(need_redraw, need_reprint);
|
if(the_point.x == 1000) handle_alchemy(need_redraw, need_reprint);
|
||||||
if(the_point.x == 1001) handle_town_wait(need_redraw, need_reprint);
|
if(the_point.x == 1001) handle_town_wait(need_redraw, need_reprint);
|
||||||
|
if(the_point.x == 1002 || the_point.x == 1003) {
|
||||||
|
if(overall_mode == MODE_BASH_TOWN) {
|
||||||
|
add_string_to_buf(" Cancelled.");
|
||||||
|
overall_mode = MODE_TOWN;
|
||||||
|
} else {
|
||||||
|
overall_mode = MODE_BASH_TOWN;
|
||||||
|
current_bash_is_bash = the_point.x == 1002;
|
||||||
|
add_string_to_buf(the_point.x == 1002 ? "Bash Door: Select a space." : "Pick Lock: Select a space.");
|
||||||
|
}
|
||||||
|
need_reprint = true;
|
||||||
|
}
|
||||||
|
|
||||||
// MARK: If in combat and pc delayed, jump forward a step
|
// MARK: If in combat and pc delayed, jump forward a step
|
||||||
if(pc_delayed) {
|
if(pc_delayed) {
|
||||||
@@ -1996,16 +2034,25 @@ bool handle_keystroke(sf::Event& event){
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'b': case 'u': case 'L':
|
case 'u':
|
||||||
if (overall_mode == MODE_TOWN) {
|
if (overall_mode == MODE_TOWN || overall_mode == MODE_USE_TOWN) {
|
||||||
pass_point.x = (chr == 'u') ? 220 : 205;
|
pass_point.x = 220;
|
||||||
pass_point.y = (chr == 'L') ? 405 : 388;
|
pass_point.y = 388;
|
||||||
pass_event.mouseButton.x = pass_point.x + ul.x;
|
pass_event.mouseButton.x = pass_point.x + ul.x;
|
||||||
pass_event.mouseButton.y = pass_point.y + ul.y;
|
pass_event.mouseButton.y = pass_point.y + ul.y;
|
||||||
are_done = handle_action(pass_event);
|
are_done = handle_action(pass_event);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'b': case 'L':
|
||||||
|
if(overall_mode == MODE_TOWN || overall_mode == MODE_BASH_TOWN) {
|
||||||
|
pass_point.x = chr == 'b' ? 1002 : 1003;
|
||||||
|
pass_point.y = 0;
|
||||||
|
pass_event.mouseButton.x = pass_point.x + ul.x;
|
||||||
|
pass_event.mouseButton.y = pass_point.y + ul.y;
|
||||||
|
are_done = handle_action(pass_event);
|
||||||
|
}
|
||||||
|
|
||||||
case 's': case 'x': case 'e':
|
case 's': case 'x': case 'e':
|
||||||
if ((overall_mode == MODE_COMBAT) ||
|
if ((overall_mode == MODE_COMBAT) ||
|
||||||
((overall_mode == MODE_FIRING) && (chr == 's')) ||
|
((overall_mode == MODE_FIRING) && (chr == 's')) ||
|
||||||
|
|||||||
Reference in New Issue
Block a user