Merge branch 'master' into win32-x64-working

Conflicts:
	src/files.c
	src/potion.c
	sys/winnt/Makefile.msc

 Changes to be committed:
	modified:   .gitignore
	modified:   DEVEL/hooksdir/nhsub
	modified:   dat/.gitignore
	modified:   dat/opthelp
	modified:   doc/Guidebook.mn
	modified:   doc/Guidebook.tex
	modified:   doc/fixes35.0
	modified:   include/context.h
	modified:   include/decl.h
	modified:   include/extern.h
	modified:   include/flag.h
	modified:   include/hack.h
	modified:   include/patchlevel.h
	modified:   src/apply.c
	modified:   src/attrib.c
	modified:   src/decl.c
	modified:   src/do.c
	modified:   src/do_name.c
	modified:   src/dothrow.c
	modified:   src/eat.c
	modified:   src/files.c
	modified:   src/hack.c
	modified:   src/invent.c
	modified:   src/lock.c
	modified:   src/mklev.c
	modified:   src/mondata.c
	modified:   src/monmove.c
	modified:   src/music.c
	modified:   src/options.c
	modified:   src/potion.c
	modified:   src/pray.c
	modified:   src/sit.c
	modified:   src/sp_lev.c
	modified:   src/uhitm.c
	modified:   sys/share/posixregex.c
	modified:   sys/winnt/Makefile.msc
	modified:   util/.gitignore
	modified:   win/win32/vs2010/NetHackW.vcxproj
This commit is contained in:
nhmall
2015-04-14 18:23:48 -04:00
38 changed files with 272 additions and 139 deletions
+1 -1
View File
@@ -4,7 +4,7 @@ TAGS
.make.state .make.state
.nse_depinfo .nse_depinfo
*~ *~
#* \#*
.#* .#*
,* ,*
_$* _$*
+17
View File
@@ -267,6 +267,8 @@ my $count = s/\$$PREFIX-(([A-Za-z][A-Za-z0-9_]*)(: ([^\x24]+))?)\$/&handlevar($2
rename $ofile, $file or die "Can't rename $ofile to $file"; rename $ofile, $file or die "Can't rename $ofile to $file";
} }
# XXX docs for --fixup and --squash are wrong in synopsis. --file missing
# --message --template -t
sub cmdparse { sub cmdparse {
my(@in) = @_; my(@in) = @_;
@@ -315,6 +317,21 @@ sub cmdparse {
if($opt{cmd} eq 'add' && $single eq 'n'){ if($opt{cmd} eq 'add' && $single eq 'n'){
exit 0; exit 0;
} }
#need to deal with options that eat a following element (-m, -F etc etc)
#add: nothing?
#commit: -c -C -F -m
# -u<mode> mode is optional
# -S<keyid> keyid is optional
if($opt{cmd} eq 'commit'){
if($single =~ m/[uS]/){
last;
}
if($single =~ m/[cCFm]/){
#XXX this will be a mess if the argument is wrong, but can we tell? No.
shift @in;
last;
}
}
} }
} }
shift @in; shift @in;
+1
View File
@@ -9,6 +9,7 @@ bogusmon
engrave engrave
epitaph epitaph
x11tiles x11tiles
nhtiles.bmp
*.lev *.lev
spec_levs spec_levs
quest_levs quest_levs
+1
View File
@@ -3,6 +3,7 @@ Boolean options not under specific compile flags (with default values in []):
option setting, which is reached via the 'O' cmd.) option setting, which is reached via the 'O' cmd.)
autodig dig if moving and wielding digging tool [FALSE] autodig dig if moving and wielding digging tool [FALSE]
autoopen walking into a door attempts to open it [TRUE]
autopickup automatically pick up objects you move over [TRUE] autopickup automatically pick up objects you move over [TRUE]
autoquiver when firing with an empty quiver, select some autoquiver when firing with an empty quiver, select some
suitable inventory weapon to fill the quiver [FALSE] suitable inventory weapon to fill the quiver [FALSE]
+2
View File
@@ -1905,6 +1905,8 @@ Cannot be set with the `O' command.
.lp autodig .lp autodig
Automatically dig if you are wielding a digging tool and moving into a place Automatically dig if you are wielding a digging tool and moving into a place
that can be dug (default false). that can be dug (default false).
.lp autoopen
Walking into a door attempts to open it (default true).
.lp "autopickup " .lp "autopickup "
Automatically pick up things onto which you move (default on). Automatically pick up things onto which you move (default on).
See See
+3
View File
@@ -2306,6 +2306,9 @@ Cannot be set with the `{\tt O}' command.
Automatically dig if you are wielding a digging tool and moving into a place Automatically dig if you are wielding a digging tool and moving into a place
that can be dug (default false). that can be dug (default false).
%.lp %.lp
\item[\ib{autoopen}]
Walking into a door attempts to open it (default true).
%.lp
\item[\ib{autopickup}] \item[\ib{autopickup}]
Automatically pick up things onto which you move (default on). Automatically pick up things onto which you move (default on).
See ``{\it pickup\_types\/}'' to refine the behavior. See ``{\it pickup\_types\/}'' to refine the behavior.
+6
View File
@@ -897,6 +897,11 @@ allow showing legal positions for stinking cloud, jumping and polearms
cloned creatures (of any type) don't deathdrop items cloned creatures (of any type) don't deathdrop items
pudding corpses behave somewhat differently than before pudding corpses behave somewhat differently than before
mithril armor should have silver color mithril armor should have silver color
lichen corpse is an acid indicator
camera may contain a picture-painting demon
some monsters can eat through iron bars
inaccessible niches occasionally have iron bars in front
sinks may teleport or polymorph
Platform- and/or Interface-Specific Fixes Platform- and/or Interface-Specific Fixes
@@ -1161,6 +1166,7 @@ Aardvark Joe's Extended Logfile
Michael Deutschmann's use_darkgray Michael Deutschmann's use_darkgray
Clive Crous' dark_room Clive Crous' dark_room
sortloot by Jeroen Demeyer and Jukka Lahtinen sortloot by Jeroen Demeyer and Jukka Lahtinen
Auto open doors by Stefano Busti
Code Cleanup and Reorganization Code Cleanup and Reorganization
+1
View File
@@ -110,6 +110,7 @@ struct context_info {
boolean bypasses; /* bypass flag is set on at least one fobj */ boolean bypasses; /* bypass flag is set on at least one fobj */
boolean botl; /* partially redo status line */ boolean botl; /* partially redo status line */
boolean botlx; /* print an entirely new bottom line */ boolean botlx; /* print an entirely new bottom line */
boolean door_opened; /* set to true if door was opened during test_move */
struct dig_info digging; struct dig_info digging;
struct victual_info victual; struct victual_info victual;
struct tin_info tin; struct tin_info tin;
+2 -1
View File
@@ -265,7 +265,7 @@ E NEARDATA struct c_color_names {
const char *const c_black, *const c_amber, *const c_golden, const char *const c_black, *const c_amber, *const c_golden,
*const c_light_blue,*const c_red, *const c_green, *const c_light_blue,*const c_red, *const c_green,
*const c_silver, *const c_blue, *const c_purple, *const c_silver, *const c_blue, *const c_purple,
*const c_white; *const c_white, *const c_orange;
} c_color_names; } c_color_names;
#define NH_BLACK c_color_names.c_black #define NH_BLACK c_color_names.c_black
#define NH_AMBER c_color_names.c_amber #define NH_AMBER c_color_names.c_amber
@@ -277,6 +277,7 @@ E NEARDATA struct c_color_names {
#define NH_BLUE c_color_names.c_blue #define NH_BLUE c_color_names.c_blue
#define NH_PURPLE c_color_names.c_purple #define NH_PURPLE c_color_names.c_purple
#define NH_WHITE c_color_names.c_white #define NH_WHITE c_color_names.c_white
#define NH_ORANGE c_color_names.c_orange
/* The names of the colors used for gems, etc. */ /* The names of the colors used for gems, etc. */
E const char *c_obj_colors[]; E const char *c_obj_colors[];
+4
View File
@@ -39,6 +39,7 @@ E void FDECL(m_unleash, (struct monst *,BOOLEAN_P));
E void NDECL(unleash_all); E void NDECL(unleash_all);
E boolean NDECL(next_to_u); E boolean NDECL(next_to_u);
E struct obj *FDECL(get_mleash, (struct monst *)); E struct obj *FDECL(get_mleash, (struct monst *));
E const char *NDECL(beautiful);
E void FDECL(check_leash, (XCHAR_P,XCHAR_P)); E void FDECL(check_leash, (XCHAR_P,XCHAR_P));
E boolean FDECL(um_dist, (XCHAR_P,XCHAR_P,XCHAR_P)); E boolean FDECL(um_dist, (XCHAR_P,XCHAR_P,XCHAR_P));
E boolean FDECL(snuff_candle, (struct obj *)); E boolean FDECL(snuff_candle, (struct obj *));
@@ -497,6 +498,7 @@ E int FDECL(omon_adj, (struct monst *,struct obj *,BOOLEAN_P));
E int FDECL(thitmonst, (struct monst *,struct obj *)); E int FDECL(thitmonst, (struct monst *,struct obj *));
E int FDECL(hero_breaks, (struct obj *,XCHAR_P,XCHAR_P,BOOLEAN_P)); E int FDECL(hero_breaks, (struct obj *,XCHAR_P,XCHAR_P,BOOLEAN_P));
E int FDECL(breaks, (struct obj *,XCHAR_P,XCHAR_P)); E int FDECL(breaks, (struct obj *,XCHAR_P,XCHAR_P));
E void FDECL(release_camera_demon, (struct obj *, XCHAR_P,XCHAR_P));
E void FDECL(breakobj, (struct obj *,XCHAR_P,XCHAR_P,BOOLEAN_P,BOOLEAN_P)); E void FDECL(breakobj, (struct obj *,XCHAR_P,XCHAR_P,BOOLEAN_P,BOOLEAN_P));
E boolean FDECL(breaktest, (struct obj *)); E boolean FDECL(breaktest, (struct obj *));
E boolean FDECL(walk_path, (coord *, coord *, boolean (*)(genericptr_t,int,int), genericptr_t)); E boolean FDECL(walk_path, (coord *, coord *, boolean (*)(genericptr_t,int,int), genericptr_t));
@@ -979,6 +981,7 @@ E int NDECL(doforce);
E boolean FDECL(boxlock, (struct obj *,struct obj *)); E boolean FDECL(boxlock, (struct obj *,struct obj *));
E boolean FDECL(doorlock, (struct obj *,int,int)); E boolean FDECL(doorlock, (struct obj *,int,int));
E int NDECL(doopen); E int NDECL(doopen);
E int FDECL(doopen_indir, (int,int));
E int NDECL(doclose); E int NDECL(doclose);
#ifdef MAC #ifdef MAC
@@ -1366,6 +1369,7 @@ E boolean FDECL(onscary, (int,int,struct monst *));
E void FDECL(monflee, (struct monst *, int, BOOLEAN_P, BOOLEAN_P)); E void FDECL(monflee, (struct monst *, int, BOOLEAN_P, BOOLEAN_P));
E int FDECL(dochug, (struct monst *)); E int FDECL(dochug, (struct monst *));
E int FDECL(m_move, (struct monst *,int)); E int FDECL(m_move, (struct monst *,int));
E void FDECL(dissolve_bars, (int,int));
E boolean FDECL(closed_door, (int,int)); E boolean FDECL(closed_door, (int,int));
E boolean FDECL(accessible, (int,int)); E boolean FDECL(accessible, (int,int));
E void FDECL(set_apparxy, (struct monst *)); E void FDECL(set_apparxy, (struct monst *));
+1
View File
@@ -18,6 +18,7 @@ struct flag {
boolean acoustics; /* allow dungeon sound messages */ boolean acoustics; /* allow dungeon sound messages */
boolean autodig; /* MRKR: Automatically dig */ boolean autodig; /* MRKR: Automatically dig */
boolean autoquiver; /* Automatically fill quiver */ boolean autoquiver; /* Automatically fill quiver */
boolean autoopen; /* open doors by walking into them */
boolean beginner; boolean beginner;
boolean biff; /* enable checking for mail */ boolean biff; /* enable checking for mail */
boolean bones; /* allow saving/loading bones */ boolean bones; /* allow saving/loading bones */
+9
View File
@@ -43,6 +43,15 @@
#define EXT_ENCUMBER 4 /* Overtaxed */ #define EXT_ENCUMBER 4 /* Overtaxed */
#define OVERLOADED 5 /* Overloaded */ #define OVERLOADED 5 /* Overloaded */
/* hunger states - see hu_stat in eat.c */
#define SATIATED 0
#define NOT_HUNGRY 1
#define HUNGRY 2
#define WEAK 3
#define FAINTING 4
#define FAINTED 5
#define STARVED 6
/* Macros for how a rumor was delivered in outrumor() */ /* Macros for how a rumor was delivered in outrumor() */
#define BY_ORACLE 0 #define BY_ORACLE 0
#define BY_COOKIE 1 #define BY_COOKIE 1
+1 -1
View File
@@ -14,7 +14,7 @@
* Incrementing EDITLEVEL can be used to force invalidation of old bones * Incrementing EDITLEVEL can be used to force invalidation of old bones
* and save files. * and save files.
*/ */
#define EDITLEVEL 60 #define EDITLEVEL 61
#define COPYRIGHT_BANNER_A \ #define COPYRIGHT_BANNER_A \
"NetHack, Copyright 1985-2015" "NetHack, Copyright 1985-2015"
+9 -2
View File
@@ -703,6 +703,14 @@ register xchar x, y;
} }
} }
const char *
beautiful()
{
return (ACURR(A_CHA) > 14) ?
(poly_gender() == 1 ? "beautiful" : "handsome") : "ugly";
}
#define WEAK 3 /* from eat.c */ #define WEAK 3 /* from eat.c */
static const char look_str[] = "look %s."; static const char look_str[] = "look %s.";
@@ -720,8 +728,7 @@ struct obj *obj;
if(!getdir((char *)0)) return 0; if(!getdir((char *)0)) return 0;
invis_mirror = Invis; invis_mirror = Invis;
useeit = !Blind && (!invis_mirror || See_invisible); useeit = !Blind && (!invis_mirror || See_invisible);
uvisage = (ACURR(A_CHA) > 14) ? uvisage = beautiful();
(poly_gender() == 1 ? "beautiful" : "handsome") : "ugly";
mirror = simpleonames(obj); /* "mirror" or "looking glass" */ mirror = simpleonames(obj); /* "mirror" or "looking glass" */
if(obj->cursed && !rn2(2)) { if(obj->cursed && !rn2(2)) {
if (!Blind) if (!Blind)
-9
View File
@@ -371,15 +371,6 @@ boolean inc_or_dec;
if (moves > 0 && (i == A_STR || i == A_CON)) (void)encumber_msg(); if (moves > 0 && (i == A_STR || i == A_CON)) (void)encumber_msg();
} }
/* hunger values - from eat.c */
#define SATIATED 0
#define NOT_HUNGRY 1
#define HUNGRY 2
#define WEAK 3
#define FAINTING 4
#define FAINTED 5
#define STARVED 6
STATIC_OVL void STATIC_OVL void
exerper() exerper()
{ {
+1 -1
View File
@@ -216,7 +216,7 @@ NEARDATA struct c_color_names c_color_names = {
"black", "amber", "golden", "black", "amber", "golden",
"light blue", "red", "green", "light blue", "red", "green",
"silver", "blue", "purple", "silver", "blue", "purple",
"white" "white", "orange"
}; };
struct menucoloring *menu_colorings = NULL; struct menucoloring *menu_colorings = NULL;
+80 -7
View File
@@ -8,6 +8,8 @@
#include "lev.h" #include "lev.h"
STATIC_DCL void FDECL(trycall, (struct obj *)); STATIC_DCL void FDECL(trycall, (struct obj *));
STATIC_DCL void NDECL(polymorph_sink);
STATIC_DCL boolean NDECL(teleport_sink);
STATIC_DCL void FDECL(dosinkring, (struct obj *)); STATIC_DCL void FDECL(dosinkring, (struct obj *));
STATIC_PTR int FDECL(drop, (struct obj *)); STATIC_PTR int FDECL(drop, (struct obj *));
@@ -259,6 +261,72 @@ register struct obj *obj;
docall(obj); docall(obj);
} }
/** Transforms the sink at the player's position into
* a fountain, throne, altar or grave. */
STATIC_DCL
void
polymorph_sink()
{
if (levl[u.ux][u.uy].typ != SINK) return;
level.flags.nsinks--;
levl[u.ux][u.uy].doormask = 0;
switch(rn2(4)) {
default:
case 0:
levl[u.ux][u.uy].typ = FOUNTAIN;
level.flags.nfountains++;
break;
case 1:
levl[u.ux][u.uy].typ = THRONE;
break;
case 2:
levl[u.ux][u.uy].typ = ALTAR;
levl[u.ux][u.uy].altarmask = Align2amask(rn2((int)A_LAWFUL+2) - 1);
break;
case 3:
levl[u.ux][u.uy].typ = ROOM;
make_grave(u.ux, u.uy, (char *) 0);
break;
}
pline_The("sink transforms into %s!",
(levl[u.ux][u.uy].typ == THRONE) ?
"a throne" : an(surface(u.ux, u.uy)));
newsym(u.ux,u.uy);
}
/** Teleports the sink at the player's position.
* @return TRUE if sink teleported */
STATIC_DCL
boolean
teleport_sink()
{
int cx, cy;
int cnt = 0;
struct trap *trp;
struct engr *eng;
do {
cx = rnd(COLNO-1);
cy = rn2(ROWNO);
trp = t_at(cx,cy);
eng = engr_at(cx,cy);
} while (((levl[cx][cy].typ != ROOM) || (trp) || (eng) ||
cansee(cx,cy)) && (cnt++ < 200));
if ((levl[cx][cy].typ == ROOM) && !trp && !eng) {
/* create sink at new position */
levl[cx][cy].typ = SINK;
levl[cx][cy].looted = levl[u.ux][u.uy].looted;
newsym(cx,cy);
/* remove old sink */
levl[u.ux][u.uy].typ = ROOM;
levl[u.ux][u.uy].looted = 0;
newsym(u.ux,u.uy);
return TRUE;
}
return FALSE;
}
STATIC_OVL STATIC_OVL
void void
dosinkring(obj) /* obj is a ring being dropped over a kitchen sink */ dosinkring(obj) /* obj is a ring being dropped over a kitchen sink */
@@ -266,6 +334,7 @@ register struct obj *obj;
{ {
register struct obj *otmp,*otmp2; register struct obj *otmp,*otmp2;
register boolean ideed = TRUE; register boolean ideed = TRUE;
boolean nosink = FALSE;
You("drop %s down the drain.", doname(obj)); You("drop %s down the drain.", doname(obj));
obj->in_use = TRUE; /* block free identification via interrupt */ obj->in_use = TRUE; /* block free identification via interrupt */
@@ -288,8 +357,9 @@ giveback:
You("smell rotten %s.", makeplural(fruitname(FALSE))); You("smell rotten %s.", makeplural(fruitname(FALSE)));
break; break;
case RIN_AGGRAVATE_MONSTER: case RIN_AGGRAVATE_MONSTER:
pline("Several flies buzz angrily around the sink."); pline("Several %s buzz angrily around the sink.",
break; Hallucination ? makeplural(rndmonnam(NULL)) : "flies");
break;
case RIN_SHOCK_RESISTANCE: case RIN_SHOCK_RESISTANCE:
pline("Static electricity surrounds the sink."); pline("Static electricity surrounds the sink.");
break; break;
@@ -354,7 +424,8 @@ giveback:
You_see("the ring slide right down the drain!"); You_see("the ring slide right down the drain!");
break; break;
case RIN_SEE_INVISIBLE: case RIN_SEE_INVISIBLE:
You_see("some air in the sink."); You_see("some %s in the sink.",
Hallucination ? "oxygen molecules" : "air");
break; break;
case RIN_STEALTH: case RIN_STEALTH:
pline_The("sink seems to blend into the floor for a moment."); pline_The("sink seems to blend into the floor for a moment.");
@@ -376,13 +447,15 @@ giveback:
pline_The("sink glows %s for a moment.", hcolor(NH_WHITE)); pline_The("sink glows %s for a moment.", hcolor(NH_WHITE));
break; break;
case RIN_TELEPORTATION: case RIN_TELEPORTATION:
pline_The("sink momentarily vanishes."); nosink = teleport_sink();
pline_The("sink %svanishes.", nosink ? "" : "momentarily ");
break; break;
case RIN_TELEPORT_CONTROL: case RIN_TELEPORT_CONTROL:
pline_The("sink looks like it is being beamed aboard somewhere."); pline_The("sink looks like it is being beamed aboard somewhere.");
break; break;
case RIN_POLYMORPH: case RIN_POLYMORPH:
pline_The("sink momentarily looks like a fountain."); polymorph_sink();
nosink = TRUE;
break; break;
case RIN_POLYMORPH_CONTROL: case RIN_POLYMORPH_CONTROL:
pline_The("sink momentarily looks like a regularly erupting geyser."); pline_The("sink momentarily looks like a regularly erupting geyser.");
@@ -391,9 +464,9 @@ giveback:
} }
if(ideed) if(ideed)
trycall(obj); trycall(obj);
else else if (!nosink)
You_hear("the ring bouncing down the drainpipe."); You_hear("the ring bouncing down the drainpipe.");
if (!rn2(20)) { if (!rn2(20) && !nosink) {
pline_The("sink backs up, leaving %s.", doname(obj)); pline_The("sink backs up, leaving %s.", doname(obj));
obj->in_use = FALSE; obj->in_use = FALSE;
dropx(obj); dropx(obj);
+1 -4
View File
@@ -420,10 +420,7 @@ do_mname()
mtmp = u.usteed; mtmp = u.usteed;
else { else {
pline("This %s creature is called %s and cannot be renamed.", pline("This %s creature is called %s and cannot be renamed.",
ACURR(A_CHA) > 14 ? beautiful(), plname);
(flags.female ? "beautiful" : "handsome") :
"ugly",
plname);
return; return;
} }
} else } else
+18
View File
@@ -1665,6 +1665,21 @@ xchar x, y; /* object location (ox, oy may not be right) */
return 1; return 1;
} }
void
release_camera_demon(obj, x,y)
struct obj *obj;
xchar x,y;
{
struct monst *mtmp;
if (!rn2(3) && (mtmp = makemon(&mons[rn2(3) ? PM_HOMUNCULUS : PM_IMP],x,y, NO_MM_FLAGS)) != 0) {
if (canspotmon(mtmp))
pline("%s is released!", Hallucination ?
An(rndmonnam(NULL)) : "The picture-painting demon");
mtmp->mpeaceful = !obj->cursed;
set_malign(mtmp);
}
}
/* /*
* Unconditionally break an object. Assumes all resistance checks * Unconditionally break an object. Assumes all resistance checks
* and break messages have been delivered prior to getting here. * and break messages have been delivered prior to getting here.
@@ -1707,6 +1722,9 @@ boolean from_invent;
} }
/* monster breathing isn't handled... [yet?] */ /* monster breathing isn't handled... [yet?] */
break; break;
case EXPENSIVE_CAMERA:
release_camera_demon(obj, x,y);
break;
case EGG: case EGG:
/* breaking your own eggs is bad luck */ /* breaking your own eggs is bad luck */
if (hero_caused && obj->spe && obj->corpsenm >= LOW_PM) if (hero_caused && obj->spe && obj->corpsenm >= LOW_PM)
+1 -9
View File
@@ -39,15 +39,6 @@ STATIC_DCL boolean FDECL(maybe_cannibal, (int,BOOLEAN_P));
char msgbuf[BUFSZ]; char msgbuf[BUFSZ];
/* hunger texts used on bottom line (each 8 chars long) */
#define SATIATED 0
#define NOT_HUNGRY 1
#define HUNGRY 2
#define WEAK 3
#define FAINTING 4
#define FAINTED 5
#define STARVED 6
/* also used to see if you're allowed to eat cats and dogs */ /* also used to see if you're allowed to eat cats and dogs */
#define CANNIBAL_ALLOWED() (Role_if(PM_CAVEMAN) || Race_if(PM_ORC)) #define CANNIBAL_ALLOWED() (Role_if(PM_CAVEMAN) || Race_if(PM_ORC))
@@ -75,6 +66,7 @@ STATIC_OVL NEARDATA const char allobj[] = {
STATIC_OVL boolean force_save_hs = FALSE; STATIC_OVL boolean force_save_hs = FALSE;
/* see hunger states in hack.h - texts used on bottom line */
const char *hu_stat[] = { const char *hu_stat[] = {
"Satiated", "Satiated",
" ", " ",
+3 -5
View File
@@ -1,4 +1,4 @@
/* NetHack 3.5 files.c $NHDT-Date: 1427337311 2015/03/26 02:35:11 $ $NHDT-Branch: derek-farming $:$NHDT-Revision: 1.141 $ */ /* NetHack 3.5 files.c $NHDT-Date: 1428972596 2015/04/14 00:49:56 $ $NHDT-Branch: master $:$NHDT-Revision: 1.164 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -3346,10 +3346,8 @@ int tribpassage;
char *endp; char *endp;
char line[BUFSZ]; char line[BUFSZ];
int scopes[4] = {0, SECTIONSCOPE, TITLESCOPE, PASSAGESCOPE}; int scope = 0;
int scope = 0, section = 0, passage = 0, book = 0; int linect = 0, passagecnt = 0, targetpassage = 0;
int linect = 0, passagecnt = 0, targetpassage = 0, textcnt = 0;
char *sectionnm = "", *booknm = "";
const char *badtranslation = "an incomprehensible foreign translation"; const char *badtranslation = "an incomprehensible foreign translation";
boolean matchedsection = FALSE, matchedtitle = FALSE; boolean matchedsection = FALSE, matchedtitle = FALSE;
winid tribwin = WIN_ERR; winid tribwin = WIN_ERR;
+25 -10
View File
@@ -347,7 +347,7 @@ still_chewing(x,y)
if (!boulder && IS_ROCK(lev->typ) && !may_dig(x,y)) { if (!boulder && IS_ROCK(lev->typ) && !may_dig(x,y)) {
You("hurt your teeth on the %s.", You("hurt your teeth on the %s.",
IS_TREE(lev->typ) ? "tree" : "hard stone"); lev->typ == IRONBARS ? "bars" : (IS_TREE(lev->typ) ? "tree" : "hard stone"));
nomul(0); nomul(0);
return 1; return 1;
} else if (context.digging.pos.x != x || context.digging.pos.y != y || } else if (context.digging.pos.x != x || context.digging.pos.y != y ||
@@ -362,9 +362,10 @@ still_chewing(x,y)
context.digging.effort = context.digging.effort =
(IS_ROCK(lev->typ) && !IS_TREE(lev->typ) ? 30 : 60) + u.udaminc; (IS_ROCK(lev->typ) && !IS_TREE(lev->typ) ? 30 : 60) + u.udaminc;
You("start chewing %s %s.", You("start chewing %s %s.",
(boulder || IS_TREE(lev->typ)) ? "on a" : "a hole in the", (boulder || IS_TREE(lev->typ) || lev->typ == IRONBARS) ? "on a" : "a hole in the",
boulder ? "boulder" : boulder ? "boulder" :
IS_TREE(lev->typ) ? "tree" : IS_ROCK(lev->typ) ? "rock" : "door"); IS_TREE(lev->typ) ? "tree" : IS_ROCK(lev->typ) ? "rock" :
lev->typ == IRONBARS ? "bar" : "door");
watch_dig((struct monst *)0, x, y, FALSE); watch_dig((struct monst *)0, x, y, FALSE);
return 1; return 1;
} else if ((context.digging.effort += (30 + u.udaminc)) <= 100) { } else if ((context.digging.effort += (30 + u.udaminc)) <= 100) {
@@ -373,7 +374,8 @@ still_chewing(x,y)
context.digging.chew ? "continue" : "begin", context.digging.chew ? "continue" : "begin",
boulder ? "boulder" : boulder ? "boulder" :
IS_TREE(lev->typ) ? "tree" : IS_TREE(lev->typ) ? "tree" :
IS_ROCK(lev->typ) ? "rock" : "door"); IS_ROCK(lev->typ) ? "rock" :
lev->typ == IRONBARS ? "bars" : "door");
context.digging.chew = TRUE; context.digging.chew = TRUE;
watch_dig((struct monst *)0, x, y, FALSE); watch_dig((struct monst *)0, x, y, FALSE);
return 1; return 1;
@@ -418,6 +420,9 @@ still_chewing(x,y)
} else if (IS_TREE(lev->typ)) { } else if (IS_TREE(lev->typ)) {
digtxt = "chew through the tree."; digtxt = "chew through the tree.";
lev->typ = ROOM; lev->typ = ROOM;
} else if (lev->typ == IRONBARS) {
digtxt = "eat through the bars.";
dissolve_bars(x,y);
} else if (lev->typ == SDOOR) { } else if (lev->typ == SDOOR) {
if (lev->doormask & D_TRAPPED) { if (lev->doormask & D_TRAPPED) {
lev->doormask = D_NODOOR; lev->doormask = D_NODOOR;
@@ -622,6 +627,7 @@ int mode;
register struct rm *tmpr = &levl[x][y]; register struct rm *tmpr = &levl[x][y];
register struct rm *ust; register struct rm *ust;
context.door_opened = FALSE;
/* /*
* Check for physical obstacles. First, the place we are going. * Check for physical obstacles. First, the place we are going.
*/ */
@@ -630,10 +636,15 @@ int mode;
if (Passes_walls && may_passwall(x,y)) { if (Passes_walls && may_passwall(x,y)) {
; /* do nothing */ ; /* do nothing */
} else if (tmpr->typ == IRONBARS) { } else if (tmpr->typ == IRONBARS) {
if ((dmgtype(youmonst.data, AD_RUST) ||
dmgtype(youmonst.data, AD_CORR)) &&
mode == DO_MOVE && still_chewing(x,y)) {
return FALSE;
}
if (!(Passes_walls || passes_bars(youmonst.data))) { if (!(Passes_walls || passes_bars(youmonst.data))) {
if (iflags.mention_walls) if (iflags.mention_walls)
You("cannot pass through the bars."); You("cannot pass through the bars.");
return FALSE; return FALSE;
} }
} else if (tunnels(youmonst.data) && !needspick(youmonst.data)) { } else if (tunnels(youmonst.data) && !needspick(youmonst.data)) {
/* Eat the rock. */ /* Eat the rock. */
@@ -670,8 +681,10 @@ int mode;
if (mode == DO_MOVE) { if (mode == DO_MOVE) {
if (amorphous(youmonst.data)) if (amorphous(youmonst.data))
You("try to ooze under the door, but can't squeeze your possessions through."); You("try to ooze under the door, but can't squeeze your possessions through.");
else if (x == ux || y == uy) { if (flags.autoopen && !context.run && !Confusion && !Stunned && !Fumbling) {
if (Blind || Stunned || ACURR(A_DEX) < 10 || Fumbling) { context.door_opened = context.move = doopen_indir(x, y);
} else if (x == ux || y == uy) {
if (Blind || Stunned || ACURR(A_DEX) < 10 || Fumbling) {
if (u.usteed) { if (u.usteed) {
You_cant("lead %s through that closed door.", You_cant("lead %s through that closed door.",
y_monnam(u.usteed)); y_monnam(u.usteed));
@@ -1395,9 +1408,11 @@ domove()
} }
if (!test_move(u.ux, u.uy, x-u.ux, y-u.uy, DO_MOVE)) { if (!test_move(u.ux, u.uy, x-u.ux, y-u.uy, DO_MOVE)) {
context.move = 0; if (!context.door_opened) {
nomul(0); context.move = 0;
return; nomul(0);
}
return;
} }
/* Move ball and chain. */ /* Move ball and chain. */
+1
View File
@@ -2540,6 +2540,7 @@ mergable(otmp, obj) /* returns TRUE if obj & otmp can be merged */
register struct obj *otmp, *obj; register struct obj *otmp, *obj;
{ {
int objnamelth = 0, otmpnamelth = 0; int objnamelth = 0, otmpnamelth = 0;
if (obj == otmp) return FALSE; /* already the same object */
if (obj->otyp != otmp->otyp) return FALSE; if (obj->otyp != otmp->otyp) return FALSE;
/* coins of the same kind will always merge */ /* coins of the same kind will always merge */
if (obj->oclass == COIN_CLASS) return TRUE; if (obj->oclass == COIN_CLASS) return TRUE;
+12 -1
View File
@@ -523,6 +523,14 @@ doforce() /* try to force a chest with your weapon */
int int
doopen() /* try to open a door */ doopen() /* try to open a door */
{ {
return doopen_indir(0, 0);
}
int
doopen_indir(x, y) /* try to open a door in direction u.dx/u.dy */
int x, y;
{
coord cc; coord cc;
register struct rm *door; register struct rm *door;
struct monst *mtmp; struct monst *mtmp;
@@ -539,7 +547,10 @@ doopen() /* try to open a door */
return 0; return 0;
} }
if(!get_adjacent_loc((char *)0, (char *)0, u.ux, u.uy, &cc)) return(0); if (x > 0 && y > 0) {
cc.x = x;
cc.y = y;
} else if(!get_adjacent_loc((char *)0, (char *)0, u.ux, u.uy, &cc)) return(0);
if((cc.x == u.ux) && (cc.y == u.uy)) return(0); if((cc.x == u.ux) && (cc.y == u.uy)) return(0);
+9
View File
@@ -492,6 +492,15 @@ int trap_type;
if(rn2(7)) if(rn2(7))
dosdoor(xx, yy, aroom, rn2(5) ? SDOOR : DOOR); dosdoor(xx, yy, aroom, rn2(5) ? SDOOR : DOOR);
else { else {
/* inaccessible niches occasionally have iron bars */
if (!rn2(5) && IS_WALL(levl[xx][yy].typ)) {
levl[xx][yy].typ = IRONBARS;
if (rn2(3))
(void) mkcorpstat(CORPSE,
(struct monst *)0,
mkclass(S_HUMAN, 0),
xx, yy+dy, TRUE);
}
if (!level.flags.noteleport) if (!level.flags.noteleport)
(void) mksobj_at(SCR_TELEPORTATION, (void) mksobj_at(SCR_TELEPORTATION,
xx, yy+dy, TRUE, FALSE); xx, yy+dy, TRUE, FALSE);
+1
View File
@@ -285,6 +285,7 @@ struct permonst *mptr;
{ {
return (boolean) (passes_walls(mptr) || amorphous(mptr) || return (boolean) (passes_walls(mptr) || amorphous(mptr) ||
unsolid(mptr) || is_whirly(mptr) || verysmall(mptr) || unsolid(mptr) || is_whirly(mptr) || verysmall(mptr) ||
dmgtype(mptr, AD_CORR) || dmgtype(mptr, AD_RUST) ||
(slithy(mptr) && !bigmonst(mptr))); (slithy(mptr) && !bigmonst(mptr)));
} }
+16 -1
View File
@@ -1180,7 +1180,14 @@ postmov:
add_damage(mtmp->mx, mtmp->my, 0L); add_damage(mtmp->mx, mtmp->my, 0L);
} }
} else if (levl[mtmp->mx][mtmp->my].typ == IRONBARS) { } else if (levl[mtmp->mx][mtmp->my].typ == IRONBARS) {
if (flags.verbose && canseemon(mtmp)) if (may_dig(mtmp->mx,mtmp->my) &&
(dmgtype(ptr, AD_RUST) || dmgtype(ptr, AD_CORR))) {
if (canseemon(mtmp))
pline("%s eats through the iron bars.",
Monnam(mtmp));
dissolve_bars(mtmp->mx, mtmp->my);
return(3);
} else if (flags.verbose && canseemon(mtmp))
Norep("%s %s %s the iron bars.", Monnam(mtmp), Norep("%s %s %s the iron bars.", Monnam(mtmp),
/* pluralization fakes verb conjugation */ /* pluralization fakes verb conjugation */
makeplural(locomotion(ptr, "pass")), makeplural(locomotion(ptr, "pass")),
@@ -1266,6 +1273,14 @@ postmov:
return(mmoved); return(mmoved);
} }
void
dissolve_bars(x, y)
register int x, y;
{
levl[x][y].typ = (Is_special(&u.uz) || *in_rooms(x,y,0)) ? ROOM : CORR;
newsym(x, y);
}
boolean boolean
closed_door(x, y) closed_door(x, y)
register int x, y; register int x, y;
+1 -1
View File
@@ -453,7 +453,7 @@ struct obj *instr;
if (do_spec && instr->spe > 0) { if (do_spec && instr->spe > 0) {
consume_obj_charge(instr, TRUE); consume_obj_charge(instr, TRUE);
You("produce soft music."); You("produce %s music.", Hallucination ? "piped" : "soft");
put_monsters_to_sleep(u.ulevel * 5); put_monsters_to_sleep(u.ulevel * 5);
exercise(A_DEX, TRUE); exercise(A_DEX, TRUE);
break; break;
+1
View File
@@ -77,6 +77,7 @@ static struct Bool_Opt
{"asksavedisk", (boolean *)0, FALSE, SET_IN_FILE}, {"asksavedisk", (boolean *)0, FALSE, SET_IN_FILE},
#endif #endif
{"autodig", &flags.autodig, FALSE, SET_IN_GAME}, {"autodig", &flags.autodig, FALSE, SET_IN_GAME},
{"autoopen", &flags.autoopen, TRUE, SET_IN_GAME},
{"autopickup", &flags.pickup, TRUE, SET_IN_GAME}, {"autopickup", &flags.pickup, TRUE, SET_IN_GAME},
{"autoquiver", &flags.autoquiver, FALSE, SET_IN_GAME}, {"autoquiver", &flags.autoquiver, FALSE, SET_IN_GAME},
#if defined(MICRO) && !defined(AMIGA) #if defined(MICRO) && !defined(AMIGA)
+10 -1
View File
@@ -1,4 +1,4 @@
/* NetHack 3.5 potion.c $NHDT-Date: 1426953330 2015/03/21 15:55:30 $ $NHDT-Branch: master $:$NHDT-Revision: 1.99 $ */ /* NetHack 3.5 potion.c $NHDT-Date: 1428972597 2015/04/14 00:49:57 $ $NHDT-Branch: master $:$NHDT-Revision: 1.111 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -1818,6 +1818,15 @@ dodip()
return 1; return 1;
} }
if(potion->otyp == POT_ACID && obj->otyp == CORPSE &&
obj->corpsenm == PM_LICHEN && !Blind) {
pline("%s %s %s around the edges.", The(cxname(obj)),
otense(obj, "turn"), potion->odiluted ?
hcolor(NH_ORANGE) : hcolor(NH_RED));
potion->in_use = FALSE; /* didn't go poof */
return(1);
}
if(is_poisonable(obj)) { if(is_poisonable(obj)) {
if(potion->otyp == POT_SICKNESS && !obj->opoisoned) { if(potion->otyp == POT_SICKNESS && !obj->opoisoned) {
char buf[BUFSZ]; char buf[BUFSZ];
+1 -11
View File
@@ -148,16 +148,6 @@ in_trouble()
struct obj *otmp; struct obj *otmp;
int i, j, count=0; int i, j, count=0;
/* Borrowed from eat.c */
#define SATIATED 0
#define NOT_HUNGRY 1
#define HUNGRY 2
#define WEAK 3
#define FAINTING 4
#define FAINTED 5
#define STARVED 6
/* /*
* major troubles * major troubles
*/ */
@@ -1369,7 +1359,7 @@ dosacrifice()
a_gname(), u_gname()); a_gname(), u_gname());
pline("%s is enraged...", u_gname()); pline("%s is enraged...", u_gname());
pline("Fortunately, %s permits you to live...", a_gname()); pline("Fortunately, %s permits you to live...", a_gname());
pline(cloud_of_smoke, hcolor("orange")); pline(cloud_of_smoke, hcolor(NH_ORANGE));
done(ESCAPED); done(ESCAPED);
} else { /* super big win */ } else { /* super big win */
adjalign(10); adjalign(10);
+8 -3
View File
@@ -67,9 +67,14 @@ dosit()
register struct obj *obj; register struct obj *obj;
obj = level.objects[u.ux][u.uy]; obj = level.objects[u.ux][u.uy];
You("sit on %s.", the(xname(obj))); if (youmonst.data->mlet == S_DRAGON && obj->oclass == COIN_CLASS) {
if (!(Is_box(obj) || objects[obj->otyp].oc_material == CLOTH)) You("coil up around your %shoard.",
pline("It's not very comfortable..."); (obj->quan + money_cnt(invent) < u.ulevel*1000) ? "meager " : "");
} else {
You("sit on %s.", the(xname(obj)));
if (!(Is_box(obj) || objects[obj->otyp].oc_material == CLOTH))
pline("It's not very comfortable...");
}
} else if (trap != 0 || (u.utrap && (u.utraptype >= TT_LAVA))) { } else if (trap != 0 || (u.utrap && (u.utraptype >= TT_LAVA))) {
if (u.utrap) { if (u.utrap) {
exercise(A_WIS, FALSE); /* you're getting stuck longer */ exercise(A_WIS, FALSE); /* you're getting stuck longer */
+6 -6
View File
@@ -407,7 +407,7 @@ opvar_clone(ov)
case SPOVAR_VARIABLE: case SPOVAR_VARIABLE:
case SPOVAR_STRING: case SPOVAR_STRING:
case SPOVAR_SEL: case SPOVAR_SEL:
tmpov->vardata.str = strdup(ov->vardata.str); tmpov->vardata.str = dupstr(ov->vardata.str);
break; break;
default: impossible("Unknown push value type (%i)!", ov->spovartyp); default: impossible("Unknown push value type (%i)!", ov->spovartyp);
} }
@@ -2677,7 +2677,7 @@ spo_monster(coder)
case SP_M_V_NAME: case SP_M_V_NAME:
if ((OV_typ(parm) == SPOVAR_STRING) && if ((OV_typ(parm) == SPOVAR_STRING) &&
!tmpmons.name.str) !tmpmons.name.str)
tmpmons.name.str = strdup(OV_s(parm)); tmpmons.name.str = dupstr(OV_s(parm));
break; break;
case SP_M_V_APPEAR: case SP_M_V_APPEAR:
if ((OV_typ(parm) == SPOVAR_INT) && if ((OV_typ(parm) == SPOVAR_INT) &&
@@ -2685,7 +2685,7 @@ spo_monster(coder)
tmpmons.appear = OV_i(parm); tmpmons.appear = OV_i(parm);
opvar_free(parm); opvar_free(parm);
OV_pop(parm); OV_pop(parm);
tmpmons.appear_as.str = strdup(OV_s(parm)); tmpmons.appear_as.str = dupstr(OV_s(parm));
} }
break; break;
case SP_M_V_ASLEEP: case SP_M_V_ASLEEP:
@@ -2820,7 +2820,7 @@ spo_object(coder)
case SP_O_V_NAME: case SP_O_V_NAME:
if ((OV_typ(parm) == SPOVAR_STRING) && if ((OV_typ(parm) == SPOVAR_STRING) &&
!tmpobj.name.str) !tmpobj.name.str)
tmpobj.name.str = strdup(OV_s(parm)); tmpobj.name.str = dupstr(OV_s(parm));
break; break;
case SP_O_V_CORPSENM: case SP_O_V_CORPSENM:
if (OV_typ(parm) == SPOVAR_MONST) { if (OV_typ(parm) == SPOVAR_MONST) {
@@ -3925,7 +3925,7 @@ spo_levregion(coder)
tmplregion->del_islev = OV_i(del_islev); tmplregion->del_islev = OV_i(del_islev);
tmplregion->rtype = OV_i(rtype); tmplregion->rtype = OV_i(rtype);
tmplregion->padding = OV_i(padding); tmplregion->padding = OV_i(padding);
tmplregion->rname.str = strdup(OV_s(rname)); tmplregion->rname.str = dupstr(OV_s(rname));
if(!tmplregion->in_islev) { if(!tmplregion->in_islev) {
get_location(&tmplregion->inarea.x1, &tmplregion->inarea.y1, get_location(&tmplregion->inarea.x1, &tmplregion->inarea.y1,
@@ -4494,7 +4494,7 @@ spo_var_init(coder)
tmpvar = (struct splev_var *)malloc(sizeof(struct splev_var)); tmpvar = (struct splev_var *)malloc(sizeof(struct splev_var));
if (!tmpvar) panic("newvar tmpvar alloc"); if (!tmpvar) panic("newvar tmpvar alloc");
tmpvar->next = coder->frame->variables; tmpvar->next = coder->frame->variables;
tmpvar->name = strdup(OV_s(vname)); tmpvar->name = dupstr(OV_s(vname));
coder->frame->variables = tmpvar; coder->frame->variables = tmpvar;
if (OV_i(arraylen) < 0) { if (OV_i(arraylen) < 0) {
+1
View File
@@ -741,6 +741,7 @@ int thrown; /* HMON_xxx (0 => hand-to-hand, other => ranged) */
case EXPENSIVE_CAMERA: case EXPENSIVE_CAMERA:
You("succeed in destroying %s. Congratulations!", You("succeed in destroying %s. Congratulations!",
ysimple_name(obj)); ysimple_name(obj));
release_camera_demon(obj, u.ux, u.uy);
useup(obj); useup(obj);
return(TRUE); return(TRUE);
/*NOTREACHED*/ /*NOTREACHED*/
+7 -6
View File
@@ -1,8 +1,8 @@
/* NetHack 3.5 posixregex.c $NHDT-Date: 1428590280 2015/04/09 14:38:00 $ $NHDT-Branch: scshunt-regex $:$NHDT-Revision: 1.0 $ */ /* NetHack 3.5 posixregex.c $NHDT-Date: 1428970913 2015/04/14 00:21:53 $ $NHDT-Branch: master $:$NHDT-Revision: 1.0 $ */
/* Copyright (c) Sean Hunt 2015. */ /* Copyright (c) Sean Hunt 2015. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
#include <hack.h> #include "hack.h"
#include <regex.h> #include <regex.h>
@@ -50,7 +50,7 @@ struct nhregex {
}; };
struct nhregex *regex_init() { struct nhregex *regex_init() {
return malloc (sizeof (struct nhregex)); return (struct nhregex *)alloc(sizeof (struct nhregex));
} }
boolean regex_compile(const char *s, struct nhregex *re) { boolean regex_compile(const char *s, struct nhregex *re) {
@@ -65,7 +65,7 @@ const char *regex_error_desc(struct nhregex *re) {
static char buf[BUFSZ]; static char buf[BUFSZ];
if (!re || !re->err) if (!re || !re->err)
return NULL; return (const char *)0;
/* FIXME: Using a static buffer here is not ideal, but avoids memory /* FIXME: Using a static buffer here is not ideal, but avoids memory
* leaks. Consider the allocation more carefully. */ * leaks. Consider the allocation more carefully. */
@@ -75,11 +75,12 @@ const char *regex_error_desc(struct nhregex *re) {
} }
boolean regex_match(const char *s, struct nhregex *re) { boolean regex_match(const char *s, struct nhregex *re) {
int result;
if (!re) if (!re)
return FALSE; return FALSE;
int result; if ((result = regexec(&re->re, s, 0, (genericptr_t)0, 0))) {
if ((result = regexec(&re->re, s, 0, NULL, 0))) {
if (result != REG_NOMATCH) if (result != REG_NOMATCH)
re->err = result; re->err = result;
return FALSE; return FALSE;
+1 -59
View File
@@ -142,63 +142,6 @@ rc=Rc
TARGET_CPU=x86 TARGET_CPU=x86
!ENDIF !ENDIF
# Common compiler flags:
# -c - compile without linking
# -W3 - Set warning level to level 3 (-W4 for 64-bit compilations)
# -Zi - generate debugging information
# -Od - disable all optimizations
# -Ox - use maximum optimizations
# -Zd - generate only public symbols and line numbers for debugging
# -GS - enable security checks
#
ccommon=-c -Zi -DCRTAPI1=_cdecl -DCRTAPI2=_cdecl -nologo -GS -c
lflags=/INCREMENTAL:NO /NOLOGO
!IF "$(TARGET_CPU)" == "x86"
cflags = $(ccommon) -D_X86_=1 -DWIN32 -D_WIN32 -W3
scall = -Gz
!ELSEIF "$(TARGET_CPU)" == "x64"
cflags = $(ccommon) -D_AMD64_=1 -DWIN64 -D_WIN64 -DWIN32 -D_WIN32
cflags = $(cflags) -W4
scall =
!ENDIF
# declarations for use on Intel x86 systems
!IF "$(TARGET_CPU)" == "x86"
DLLENTRY = @12
!ENDIF
# declarations for use on AMD64 systems
!IF "$(TARGET_CPU)" == "x64"
DLLENTRY =
!ENDIF
# for Windows applications
conlflags = $(lflags) -subsystem:console,$(EXEVER)
guilflags = $(lflags) -subsystem:windows,$(EXEVER)
dlllflags = $(lflags) -entry:_DllMainCRTStartup$(DLLENTRY) -dll
# basic subsystem specific libraries, less the C Run-Time
baselibs = kernel32.lib $(optlibs) $(winsocklibs) advapi32.lib
winlibs = $(baselibs) user32.lib gdi32.lib comdlg32.lib winspool.lib
# for Windows applications that use the C Run-Time libraries
conlibs = $(baselibs)
guilibs = $(winlibs)
#
# End of VS2013 and greater stuff
#=============================================
#
#=============================================
# Visual Studio versions >= 2013 specific stuff
#=============================================
!IF "$(TARGET_CPU)" == ""
TARGET_CPU=x86
!ENDIF
# Common compiler flags: # Common compiler flags:
# -c - compile without linking # -c - compile without linking
# -W3 - Set warning level to level 3 (-W4 for 64-bit compilations) # -W3 - Set warning level to level 3 (-W4 for 64-bit compilations)
@@ -413,7 +356,7 @@ lflagsUtil = $(lflags) $(conlibs)
# - Game build # - Game build
#========================================== #==========================================
GAMEPDBFILE= /DEBUG /PDB:"$(O)$(GAME).PDB" GAMEPDBFILE= /PDB:"$(O)$(GAME).PDB"
GAMEMAPFILE= /MAP:"$(O)$(GAME).MAP" GAMEMAPFILE= /MAP:"$(O)$(GAME).MAP"
LIBS= user32.lib winmm.lib $(ZLIB) LIBS= user32.lib winmm.lib $(ZLIB)
@@ -588,7 +531,6 @@ VOBJ24 = $(O)track.o $(O)trap.o $(O)u_init.o $(O)uhitm.o
VOBJ25 = $(O)vault.o $(O)vis_tab.o $(O)vision.o $(O)weapon.o VOBJ25 = $(O)vault.o $(O)vis_tab.o $(O)vision.o $(O)weapon.o
VOBJ26 = $(O)were.o $(O)wield.o $(O)windows.o $(O)wizard.o VOBJ26 = $(O)were.o $(O)wield.o $(O)windows.o $(O)wizard.o
VOBJ27 = $(O)worm.o $(O)worn.o $(O)write.o $(O)zap.o VOBJ27 = $(O)worm.o $(O)worn.o $(O)write.o $(O)zap.o
DLBOBJ = $(O)dlb.o DLBOBJ = $(O)dlb.o
REGEX = $(O)cppregex.o REGEX = $(O)cppregex.o
+1
View File
@@ -8,5 +8,6 @@ lev_yacc.c
tile2x11 tile2x11
lev_comp lev_comp
tileedit tileedit
tile2bmp
dlb dlb
recover recover
+9
View File
@@ -637,6 +637,15 @@ copy ..\sys\winnt\defaults.nh ..\binary\defaults.nh
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile> </ClCompile>
<ClCompile Include="..\sys\share\cppregex.cpp"> <ClCompile Include="..\sys\share\cppregex.cpp">
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<ClCompile Include="..\win\tty\getline.c"> <ClCompile Include="..\win\tty\getline.c">
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>