Add new command: #retravel

Retravel travels to the previously selected destination.

Also changes the travel-via-mouse to execute the extended command
instead of faking a special key.
This commit is contained in:
Pasi Kallinen
2021-07-21 10:55:14 +03:00
parent 76bb205367
commit 433f0cc15f
4 changed files with 37 additions and 19 deletions

View File

@@ -1432,6 +1432,10 @@ is on.
.lp "#remove " .lp "#remove "
Remove an accessory (ring, amulet, etc). Remove an accessory (ring, amulet, etc).
Default key is \(oqR\(cq. Default key is \(oqR\(cq.
.lp "#retravel"
Travel to a previously selected travel destination.
Default key is \(oqC-_\(cq.
See also #travel.
.lp "#ride " .lp "#ride "
Ride (or stop riding) a saddled creature. Ride (or stop riding) a saddled creature.
Autocompletes. Autocompletes.
@@ -1557,6 +1561,7 @@ When picking a target with cursor and the
.op autodescribe .op autodescribe
option is on, the top line will show \(lq(no travel path)\(rq if option is on, the top line will show \(lq(no travel path)\(rq if
your character does not know of a path to that location. your character does not know of a path to that location.
See also #retravel.
.lp "#turn " .lp "#turn "
Turn undead away. Turn undead away.
Autocompletes. Autocompletes.

View File

@@ -570,6 +570,7 @@ defer encumbrance check during polymorph to new man; newman() -> redist_attr()
became obsolete if polyman() subsequently restored old attributes became obsolete if polyman() subsequently restored old attributes
fix heap-use-after-free when attacking monster with potion fix heap-use-after-free when attacking monster with potion
for "a" vs "an", add ukulele and uke as exceptions for "an u<anything>" for "a" vs "an", add ukulele and uke as exceptions for "an u<anything>"
add new extended command #retravel
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository Fixes to 3.7.0-x Problems that Were Exposed Via git Repository

View File

@@ -459,7 +459,6 @@ enum nh_keyfunc {
NHKF_NOPICKUP, /* 'm' */ NHKF_NOPICKUP, /* 'm' */
NHKF_RUN_NOPICKUP, /* 'M' */ NHKF_RUN_NOPICKUP, /* 'M' */
NHKF_DOINV, /* '0' */ NHKF_DOINV, /* '0' */
NHKF_TRAVEL, /* via mouse */
NHKF_CLICKLOOK, NHKF_CLICKLOOK,
NHKF_REDRAW, NHKF_REDRAW,

View File

@@ -16,7 +16,6 @@
#endif #endif
#endif #endif
#define CMD_TRAVEL (char) 0x90
#define CMD_CLICKLOOK (char) 0x8F #define CMD_CLICKLOOK (char) 0x8F
#ifdef DUMB /* stuff commented out in extern.h, but needed here */ #ifdef DUMB /* stuff commented out in extern.h, but needed here */
@@ -105,6 +104,7 @@ static int timed_occupation(void);
static boolean can_do_extcmd(const struct ext_func_tab *); static boolean can_do_extcmd(const struct ext_func_tab *);
static int doextcmd(void); static int doextcmd(void);
static int dotravel(void); static int dotravel(void);
static int dotravel_target(void);
static int doterrain(void); static int doterrain(void);
static int wiz_wish(void); static int wiz_wish(void);
static int wiz_identify(void); static int wiz_identify(void);
@@ -1998,6 +1998,8 @@ struct ext_func_tab extcmdlist[] = {
doredraw, IFBURIED | GENERALCMD, NULL }, doredraw, IFBURIED | GENERALCMD, NULL },
{ 'R', "remove", "remove an accessory (ring, amulet, etc)", { 'R', "remove", "remove an accessory (ring, amulet, etc)",
doremring, 0, NULL }, doremring, 0, NULL },
{ C('_'), "retravel", "travel to previously selected travel location",
dotravel_target, 0, NULL },
{ M('R'), "ride", "mount or dismount a saddled steed", { M('R'), "ride", "mount or dismount a saddled steed",
doride, AUTOCOMPLETE, NULL }, doride, AUTOCOMPLETE, NULL },
{ M('r'), "rub", "rub a lamp or a stone", { M('r'), "rub", "rub a lamp or a stone",
@@ -3048,7 +3050,6 @@ static struct {
{ NHKF_NOPICKUP, 'm', "nopickup" }, { NHKF_NOPICKUP, 'm', "nopickup" },
{ NHKF_RUN_NOPICKUP, 'M', "run.nopickup" }, { NHKF_RUN_NOPICKUP, 'M', "run.nopickup" },
{ NHKF_DOINV, '0', "doinv" }, { NHKF_DOINV, '0', "doinv" },
{ NHKF_TRAVEL, CMD_TRAVEL, (char *) 0 }, /* no binding */
{ NHKF_CLICKLOOK, CMD_CLICKLOOK, (char *) 0 }, /* no binding */ { NHKF_CLICKLOOK, CMD_CLICKLOOK, (char *) 0 }, /* no binding */
{ NHKF_REDRAW, C('r'), "redraw" }, { NHKF_REDRAW, C('r'), "redraw" },
{ NHKF_REDRAW2, C('l'), "redraw.numpad" }, { NHKF_REDRAW2, C('l'), "redraw.numpad" },
@@ -3547,13 +3548,6 @@ rhack(char *cmd)
do_look(2, &g.clicklook_cc); do_look(2, &g.clicklook_cc);
} }
return; return;
case NHKF_TRAVEL:
g.context.travel = 1;
g.context.travel1 = 1;
g.context.run = 8;
g.context.nopick = 1;
g.domove_attempting |= DOMOVE_RUSH;
break;
default: default:
if (movecmd(*cmd, MV_WALK)) { /* ordinary movement */ if (movecmd(*cmd, MV_WALK)) { /* ordinary movement */
g.context.run = 0; /* only matters here if it was 8 */ g.context.run = 0; /* only matters here if it was 8 */
@@ -4362,9 +4356,9 @@ click_to_cmd(int x, int y, int mod)
if (abs(x) <= 1 && abs(y) <= 1) { if (abs(x) <= 1 && abs(y) <= 1) {
x = sgn(x), y = sgn(y); x = sgn(x), y = sgn(y);
} else { } else {
u.tx = u.ux + x; iflags.travelcc.x = u.tx = u.ux + x;
u.ty = u.uy + y; iflags.travelcc.y = u.ty = u.uy + y;
cmd[0] = g.Cmd.spkeys[NHKF_TRAVEL]; cmdq_add_ec(dotravel_target);
return cmd; return cmd;
} }
@@ -4708,7 +4702,6 @@ readchar_poskey(int *x, int *y, int *mod)
static int static int
dotravel(void) dotravel(void)
{ {
static char cmd[2];
coord cc; coord cc;
/* /*
@@ -4722,7 +4715,6 @@ dotravel(void)
* there's no reason for the option to disable travel-by-keys. * there's no reason for the option to disable travel-by-keys.
*/ */
cmd[1] = 0;
cc.x = iflags.travelcc.x; cc.x = iflags.travelcc.x;
cc.y = iflags.travelcc.y; cc.y = iflags.travelcc.y;
if (cc.x == 0 && cc.y == 0) { if (cc.x == 0 && cc.y == 0) {
@@ -4748,12 +4740,33 @@ dotravel(void)
return 0; return 0;
} }
} }
iflags.getloc_travelmode = FALSE;
iflags.travelcc.x = u.tx = cc.x; iflags.travelcc.x = u.tx = cc.x;
iflags.travelcc.y = u.ty = cc.y; iflags.travelcc.y = u.ty = cc.y;
cmd[0] = g.Cmd.spkeys[NHKF_TRAVEL];
readchar_queue = cmd; return dotravel_target();
return 0; }
/* #retravel, travel to iflags.travelcc, which must be set */
static int
dotravel_target(void)
{
if (!isok(iflags.travelcc.x, iflags.travelcc.y))
return 0;
iflags.getloc_travelmode = FALSE;
g.context.travel = 1;
g.context.travel1 = 1;
g.context.run = 8;
g.context.nopick = 1;
g.domove_attempting |= DOMOVE_RUSH;
if (!g.multi)
g.multi = max(COLNO, ROWNO);
u.last_str_turn = 0;
g.context.mv = TRUE;
return 1;
} }
/* /*