Merge branch 'master' into win32-x64-working

This commit is contained in:
nhmall
2015-06-17 19:39:24 -04:00
6 changed files with 97 additions and 60 deletions

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 cmd.c $NHDT-Date: 1434071945 2015/06/12 01:19:05 $ $NHDT-Branch: master $:$NHDT-Revision: 1.195 $ */
/* NetHack 3.6 cmd.c $NHDT-Date: 1434507810 2015/06/17 02:23:30 $ $NHDT-Branch: master $:$NHDT-Revision: 1.196 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -3201,7 +3201,8 @@ STATIC_OVL boolean
accept_menu_prefix(cmd_func)
int NDECL((*cmd_func));
{
if (cmd_func == dopickup || cmd_func == doextcmd || cmd_func == doextlist)
if (cmd_func == dopickup || cmd_func == dotip
|| cmd_func == doextcmd || cmd_func == doextlist)
return TRUE;
return FALSE;
}

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 pickup.c $NHDT-Date: 1432804962 2015/05/28 09:22:42 $ $NHDT-Branch: master $:$NHDT-Revision: 1.157 $ */
/* NetHack 3.6 pickup.c $NHDT-Date: 1434507811 2015/06/17 02:23:31 $ $NHDT-Branch: master $:$NHDT-Revision: 1.159 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -2691,53 +2691,74 @@ dotip()
Sprintf(buf, "You can't tip %s while carrying so much.",
!flags.verbose ? "a container" : (boxes > 1) ? "one" : "it");
if (!check_capacity(buf) && able_to_loot(cc.x, cc.y, FALSE)) {
if (boxes > 1) {
if (boxes > 1 && (flags.menu_style != MENU_TRADITIONAL
|| iflags.menu_requested)) {
/* use menu to pick a container to tip */
int n, i;
winid win;
anything any;
menu_item *pick_list = NULL;
struct obj dummyobj, *otmp;
any = zeroany;
win = create_nhwindow(NHW_MENU);
start_menu(win);
for (cobj = level.objects[cc.x][cc.y]; cobj;
for (cobj = level.objects[cc.x][cc.y], i = 0; cobj;
cobj = cobj->nexthere)
if (Is_container(cobj)) {
++i;
any.a_obj = cobj;
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE,
doname(cobj), MENU_UNSELECTED);
}
if (invent) {
any = zeroany;
add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE,
"", MENU_UNSELECTED);
any.a_obj = &dummyobj;
/* use 'i' for inventory unless there are so many
containers that it's already being used */
i = (i <= 'i' - 'a' && !flags.lootabc) ? 'i' : 0;
add_menu(win, NO_GLYPH, &any, i, 0, ATR_NONE,
"tip something being carried", MENU_SELECTED);
}
end_menu(win, "Tip which container?");
n = select_menu(win, PICK_ONE, &pick_list);
destroy_nhwindow(win);
if (n > 0) {
for (i = 0; i < n; i++) {
tipcontainer(pick_list[i].item.a_obj);
free((genericptr_t) pick_list);
return 1;
}
}
/*
* Deal with quirk of preselected item in pick-one menu:
* n == 0 => picked preselected entry, toggling it off;
* n == 1 => accepted preselected choice via SPACE or RETURN;
* n == 2 => picked something other than preselected entry;
* n == -1 => cancelled via ESC;
*/
otmp = (n <= 0) ? (struct obj *) 0 : pick_list[0].item.a_obj;
if (n > 1 && otmp == &dummyobj)
otmp = pick_list[1].item.a_obj;
if (pick_list)
free((genericptr_t) pick_list);
if (otmp && otmp != &dummyobj) {
tipcontainer(otmp);
return 1;
}
if (n == -1)
return 0;
/* else pick-from-invent below */
} else {
for (cobj = level.objects[cc.x][cc.y]; cobj; cobj = nobj) {
nobj = cobj->nexthere;
if (!Is_container(cobj))
continue;
c = ynq(safe_qbuf(qbuf, "There is ", " here, tip it?", cobj,
c = ynq(safe_qbuf(qbuf, "There is ", " here, tip it?",
cobj,
doname, ansimpleoname, "container"));
if (c == 'q')
return 0;
if (c == 'n')
continue;
tipcontainer(cobj);
/* can only tip one container at a time */
return 1;
}
}

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 version.c $NHDT-Date: 1434446944 2015/06/16 09:29:04 $ $NHDT-Branch: master $:$NHDT-Revision: 1.33 $ */
/* NetHack 3.6 version.c $NHDT-Date: 1434505545 2015/06/17 01:45:45 $ $NHDT-Branch: master $:$NHDT-Revision: 1.35 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -17,7 +17,7 @@
#define BETA_INFO "Beta2"
STATIC_DCL void FDECL(insert_rtoptions, (winid,char *));
STATIC_DCL void FDECL(insert_rtoptions, (winid,char *,const char *));
/* fill buffer with short version (so caller can avoid including date.h) */
char *
@@ -112,13 +112,13 @@ doextversion()
continue;
if (!rtadded) {
pd = eos(buf);
pd--;
if (*pd == '.' && strlen(buf) > 1) {
insert_rtoptions(win, buf);
rtadded = TRUE; /* only do it once */
*buf = 0;
}
const char *catchphrase = ", and basic NetHack features.";
pd = strstri(buf, catchphrase);
if (pd) {
*pd = '\0';
insert_rtoptions(win, buf, &catchphrase[2]);
rtadded = TRUE; /* only do it once */
}
}
if (*buf)
putstr(win, 0, buf);
@@ -144,42 +144,57 @@ static const char indent[] = " ";
* game image, so we insert those options here.
*/
STATIC_OVL void
insert_rtoptions(win, buf)
insert_rtoptions(win, buf, finalphrase)
winid win;
char *buf;
const char *finalphrase;
{
char rtbuf[BUFSZ];
char *pd;
int l, i = 0;
int l, i;
const char *s1 = 0, *s2 = 0, *s3 = 0, *s4 = 0;
if (strlen(buf) >= BUFSZ - 3)
if ((int)strlen(buf) >= (BUFSZ - 1))
return;
strcpy(rtbuf, buf);
pd = eos(rtbuf);
pd--;
if (*pd == '.')
*pd = 0;
Strcat(rtbuf, ", ");
l = strlen(rtbuf);
for (i = 0; i < SIZE(rt_opts); i++) {
if (l + strlen(rt_opts[i]) > COLNO - 5) {
putstr(win, 0, rtbuf);
if (strlen(rt_opts[i]) < BUFSZ - (1 + strlen(indent))) {
Strcpy(rtbuf, indent);
}
for (i = 0; i < (SIZE(rt_opts) + 1); i += 2) {
if (i < SIZE(rt_opts)) {
s1 = ", ";
s2 = rt_opts[i];
s3 = " ";
s4 = rt_opts[i+1];
} else {
s1 = " ";
s2 = finalphrase;
s3 = "";
s4 = "";
}
Strcat(rtbuf, rt_opts[i]);
l = strlen(rtbuf);
if (i % 2)
Strcat(rtbuf, (i < SIZE(rt_opts)- 1) ? "," : "."), l++;
else
Strcat(rtbuf, " "), l++;
l = (int)strlen(rtbuf) + (int)strlen(s1) + (int)strlen(s2) +
(int)strlen(s3) + (int)strlen(s4) + 1;
if (l <= (COLNO - 5) && l < (BUFSZ-1)) {
Strcat(rtbuf, s1);
Strcat(rtbuf, s2);
Strcat(rtbuf, s3);
Strcat(rtbuf, s4);
} else {
putstr(win, 0, rtbuf);
if (i >= SIZE(rt_opts))
s1 = "";
l = (int)strlen(indent) + (int)strlen(s1) + (int)strlen(s2) +
(int)strlen(s3) + (int)strlen(s4) + 1;
if (l <= (COLNO -5) && l < (BUFSZ-1)) {
Strcpy(rtbuf, indent);
Strcat(rtbuf, s1);
Strcat(rtbuf, s2);
Strcat(rtbuf, s3);
Strcat(rtbuf, s4);
}
}
}
if (l)
putstr(win, 0, rtbuf);
*buf = '\0';
}
#ifdef MICRO