From b633b91875e6c92e23e426481f38e3ff733a116c Mon Sep 17 00:00:00 2001 From: cohrs Date: Mon, 30 Jun 2003 04:00:14 +0000 Subject: [PATCH] SF patch 536615: travel cache This is derived from the proposed patch and feedback to it. This applies the last-position cache behavior without an option, making the behavior more like it is for interfaces with a mouse, where holding the mouse still acts the same way as the travel cache. The code is not #ifdef'd either. --- doc/fixes34.2 | 1 + include/flag.h | 3 ++- src/cmd.c | 13 +++++++++---- src/hack.c | 1 + src/options.c | 1 + 5 files changed, 14 insertions(+), 5 deletions(-) diff --git a/doc/fixes34.2 b/doc/fixes34.2 index cc9c78f82..32a6b6442 100644 --- a/doc/fixes34.2 +++ b/doc/fixes34.2 @@ -96,6 +96,7 @@ when jousting a pudding into a polymorh trap, it was possible to end up don't allow polymorphed player to web over the stairs geographical shopkeeper updates stethoscope use should be free the first time it's use per player move +travel command caches last position to make non-mouse less painful Platform- and/or Interface-Specific Fixes diff --git a/include/flag.h b/include/flag.h index 61dbda2bb..16194aa90 100644 --- a/include/flag.h +++ b/include/flag.h @@ -176,7 +176,8 @@ struct instance_flags { int purge_monsters; /* # of dead monsters still on fmon list */ int *opt_booldup; /* for duplication of boolean opts in config file */ int *opt_compdup; /* for duplication of compound opts in config file */ - uchar bouldersym; /* symbol for boulder display */ + uchar bouldersym; /* symbol for boulder display */ + coord travelcc; /* coordinates for travel_cache */ #ifdef WIZARD boolean sanity_check; /* run sanity checks */ boolean mon_polycontrol; /* debug: control monster polymorphs */ diff --git a/src/cmd.c b/src/cmd.c index 8f12a8dfc..8240a5779 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -2413,15 +2413,20 @@ dotravel() if (!flags.travelcmd) return 0; cmd[1]=0; - cc.x = u.ux; - cc.y = u.uy; + cc.x = iflags.travelcc.x; + cc.y = iflags.travelcc.y; + if (cc.x == -1 && cc.y == -1) { + /* No cached destination, start attempt from current position */ + cc.x = u.ux; + cc.y = u.uy; + } pline("Where do you want to travel to?"); if (getpos(&cc, TRUE, "the desired destination") < 0) { /* user pressed ESC */ return 0; } - u.tx = cc.x; - u.ty = cc.y; + iflags.travelcc.x = u.tx = cc.x; + iflags.travelcc.y = u.ty = cc.y; cmd[0] = CMD_TRAVEL; readchar_queue = cmd; return 0; diff --git a/src/hack.c b/src/hack.c index 1e8b721bd..bea9d0ec9 100644 --- a/src/hack.c +++ b/src/hack.c @@ -768,6 +768,7 @@ boolean guess; nomul(0); /* reset run so domove run checks work */ flags.run = 8; + iflags.travelcc.x = iflags.travelcc.y = -1; } return TRUE; } diff --git a/src/options.c b/src/options.c index ad31a8f97..9aea815c1 100644 --- a/src/options.c +++ b/src/options.c @@ -516,6 +516,7 @@ initoptions() for (i = 0; i < WARNCOUNT; i++) warnsyms[i] = def_warnsyms[i].sym; iflags.bouldersym = 0; + iflags.travelcc.x = iflags.travelcc.y = -1; flags.warnlevel = 1; flags.warntype = 0L;