Merge branch 'NetHack-3.7' into paxed-lua-v2-merged
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# NetHack 3.6 tribute $NHDT-Date: 1565090653 2019/08/06 11:24:13 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.83 $
|
||||
# NetHack 3.6 tribute $NHDT-Date: 1573777025 2019/11/15 00:17:05 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.84 $
|
||||
# Copyright (c) 2017 by Robert Patrick Rankin
|
||||
# NetHack may be freely redistributed. See license for details.
|
||||
# A tribute introduced in NetHack 3.6.0 to:
|
||||
@@ -3694,7 +3694,7 @@ reader's brain.
|
||||
|
||||
For example, the big volume open in front of him contained some of the
|
||||
collected drawings of Leonard of Quirm, skilled artist and certified
|
||||
genious, with a mind that wandered so much it came back with souvenirs.
|
||||
genius, with a mind that wandered so much it came back with souvenirs.
|
||||
|
||||
Leonard's books were full of sketches--of kittens, of the way water flows,
|
||||
of the wives of influential Ankh-Morporkian merchants whose portraits had
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.168 $ $NHDT-Date: 1573290414 2019/11/09 09:06:54 $
|
||||
$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.176 $ $NHDT-Date: 1573777025 2019/11/15 00:17:05 $
|
||||
|
||||
This fixes36.3 file is here to capture information about updates in the 3.6.x
|
||||
lineage following the release of 3.6.2 in May 2019. Please note, however,
|
||||
@@ -115,7 +115,8 @@ for multi-shot shooting by monsters, a typo checked hero's weapon for
|
||||
when a boulder was teleported, if it landed in a pit or trap door or hole its
|
||||
former location wasn't updated to show that it wasn't there anymore
|
||||
(noticed in Sokoban but not limited to there)
|
||||
Terry Pratchett tribute, fix typo in passage #4 for Mort ("the" -> "they")
|
||||
Terry Pratchett tribute, fix typo in passage #4 for Mort ("the" -> "they");
|
||||
also passage #7 for Soul Music ("genious" -> "genius")
|
||||
fix typo in end_of_input() present since 3.6.0 that would prevent compilation
|
||||
for NOSAVEONHANGUP+INSURANCE configuration
|
||||
when a status condition becomes fatal, keep it listed as an active condition
|
||||
@@ -221,6 +222,9 @@ playing music while hallucinating: message misspelled "butterflies"
|
||||
putting on gloves while having slippery fingers transfered slipperiness to
|
||||
those gloves; taking off slippery gloves directly was disallowed but
|
||||
losing them in other ways transfered slipperiness to bare fingers
|
||||
when a monster reads a scroll of fire to cure sliming, don't access that
|
||||
scroll's memory after it has been used up (bcsign)
|
||||
monster vs monster attacks didn't handle shades or silver weapon feedback
|
||||
|
||||
|
||||
Fixes to Post-3.6.2 Problems that Were Exposed Via git Repository
|
||||
@@ -249,6 +253,7 @@ in symset:curses, symbol S_tree was accidentally set to horizontal line where
|
||||
percentage highlighting for Xp broke up/down/changed highlighting for it;
|
||||
it was flagged as having gone up every time the percentage changed
|
||||
deaf change to zap_over_floor needed to be restricted to player actions only
|
||||
monster vs shade attack inflicted damage despite "passes harmlessly through"
|
||||
curses: sometimes the message window would show a blank line after a prompt
|
||||
curses: the change to show map in columns 1..79 instead of 2..80 made the
|
||||
highlight for '@' show up in the wrong place if clipped map had been
|
||||
@@ -328,6 +333,7 @@ curses: enable the 'use_inverse' boolean option (via wincap WC_INVERSE flag)
|
||||
to override default of False (for tty's benefit)
|
||||
curses: force 'O' command's menus for 'symset' and 'roguesymset' options to
|
||||
be wider so that fewer entries with set descriptions will wrap
|
||||
curses: stop restricting menu width to half the display width
|
||||
curses+'perm_invent': entries were wrapping without any control; usually not
|
||||
noticeable because next entry overwrote, but visible for final entry
|
||||
when whole inventory fit within the available height; looked ok with
|
||||
@@ -351,6 +357,13 @@ curses+EDIT_GETLIN: the preceding fix handled an answer which spanned more
|
||||
than one line but didn't remove the answer properly if the prompt
|
||||
portion of prompt+answer spanned more than one line
|
||||
msdos: code fixes to allow a build with curses and PDCurses
|
||||
msdos: added Makefile1.cross (host portion) and Makefile2.cross (target
|
||||
platform portion) to assist in moving this port toward a cross-compiled
|
||||
build hosted on linux/OSX/Windows with recent C dialect support; that
|
||||
will also pave the way for CI automation and testing of the msdos port
|
||||
build in future should the port remain on the radar; currently only
|
||||
useful for testing the msdos port compile as it cannot yet build a
|
||||
complete game
|
||||
tty: re-do one optimization used when status conditions have all been removed
|
||||
and remove another that tried to check whether condition text to be
|
||||
displayed next was the same as the existing value; sometimes new
|
||||
|
||||
@@ -117,10 +117,10 @@
|
||||
.\" .BR - hard line break with vertical padding inserted
|
||||
.\" $1 - repeat count for amount of padding (optional; default is 1)
|
||||
.de BR
|
||||
.nr bR (\\$1-0)
|
||||
.if \\n(bR<1 .nr bR 1
|
||||
.nr bR \\n(bR*\\n(pd
|
||||
.sn \\n(bRu
|
||||
.ie \\.$==0 .nr bR 1v
|
||||
.el .nr bR (\\$1-0)v
|
||||
\0
|
||||
.sp \\n(bR
|
||||
.br
|
||||
..
|
||||
.\" .UR url
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 extern.h $NHDT-Date: 1573346164 2019/11/10 00:36:04 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.738 $ */
|
||||
/* NetHack 3.6 extern.h $NHDT-Date: 1573688684 2019/11/13 23:44:44 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.739 $ */
|
||||
/* Copyright (c) Steve Creps, 1988. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -2632,6 +2632,8 @@ E int FDECL(find_roll_to_hit, (struct monst *, UCHAR_P, struct obj *,
|
||||
int *, int *));
|
||||
E boolean FDECL(attack, (struct monst *));
|
||||
E boolean FDECL(hmon, (struct monst *, struct obj *, int, int));
|
||||
E boolean FDECL(shade_miss, (struct monst *, struct monst *, struct obj *,
|
||||
BOOLEAN_P, BOOLEAN_P));
|
||||
E int FDECL(damageum, (struct monst *, struct attack *, int));
|
||||
E void FDECL(missum, (struct monst *, struct attack *, BOOLEAN_P));
|
||||
E int FDECL(passive, (struct monst *, struct obj *, BOOLEAN_P, int,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 dothrow.c $NHDT-Date: 1569276989 2019/09/23 22:16:29 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.161 $ */
|
||||
/* NetHack 3.6 dothrow.c $NHDT-Date: 1573688688 2019/11/13 23:44:48 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.164 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/*-Copyright (c) Robert Patrick Rankin, 2013. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -1149,6 +1149,10 @@ boolean twoweap; /* used to restore twoweapon mode if wielded weapon returns */
|
||||
will be left with a stale pointer. */
|
||||
|
||||
if (u.uswallow) {
|
||||
if (obj == uball) {
|
||||
uball->ox = uchain->ox = u.ux;
|
||||
uball->oy = uchain->oy = u.uy;
|
||||
}
|
||||
mon = u.ustuck;
|
||||
g.bhitpos.x = mon->mx;
|
||||
g.bhitpos.y = mon->my;
|
||||
@@ -1283,7 +1287,7 @@ boolean twoweap; /* used to restore twoweapon mode if wielded weapon returns */
|
||||
(void) snuff_candle(obj);
|
||||
g.notonhead = (g.bhitpos.x != mon->mx || g.bhitpos.y != mon->my);
|
||||
obj_gone = thitmonst(mon, obj);
|
||||
/* Monster may have been tamed; this frees old mon */
|
||||
/* Monster may have been tamed; this frees old mon [obsolete] */
|
||||
mon = m_at(g.bhitpos.x, g.bhitpos.y);
|
||||
|
||||
/* [perhaps this should be moved into thitmonst or hmon] */
|
||||
@@ -1308,8 +1312,8 @@ boolean twoweap; /* used to restore twoweapon mode if wielded weapon returns */
|
||||
clear_thrownobj = TRUE;
|
||||
goto throwit_return;
|
||||
} else {
|
||||
/* Mjollnir must we wielded to be thrown--caller verifies this;
|
||||
aklys must we wielded as primary to return when thrown */
|
||||
/* Mjollnir must be wielded to be thrown--caller verifies this;
|
||||
aklys must be wielded as primary to return when thrown */
|
||||
if (iflags.returning_missile) { /* Mjollnir or aklys */
|
||||
if (rn2(100)) {
|
||||
if (tethered_weapon)
|
||||
|
||||
@@ -56,7 +56,7 @@ const
|
||||
#endif
|
||||
|
||||
#if defined(MSDOS) || defined(OS2) || defined(TOS) || defined(WIN32)
|
||||
#ifndef GNUDOS
|
||||
#ifndef __DJGPP__
|
||||
#include <sys\stat.h>
|
||||
#else
|
||||
#include <sys/stat.h>
|
||||
|
||||
118
src/mhitm.c
118
src/mhitm.c
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 mhitm.c $NHDT-Date: 1560161806 2019/06/10 10:16:46 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.116 $ */
|
||||
/* NetHack 3.6 mhitm.c $NHDT-Date: 1573773926 2019/11/14 23:25:26 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.118 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/*-Copyright (c) Robert Patrick Rankin, 2011. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -52,16 +52,35 @@ struct attack *mattk;
|
||||
{
|
||||
const char *fmt;
|
||||
char buf[BUFSZ];
|
||||
boolean showit = FALSE;
|
||||
|
||||
/* unhiding or unmimicking happens even if hero can't see it
|
||||
because the formerly concealed monster is now in action */
|
||||
if (M_AP_TYPE(mdef)) {
|
||||
seemimic(mdef);
|
||||
showit |= g.vis;
|
||||
} else if (mdef->mundetected) {
|
||||
mdef->mundetected = 0;
|
||||
showit |= g.vis;
|
||||
}
|
||||
if (M_AP_TYPE(magr)) {
|
||||
seemimic(magr);
|
||||
showit |= g.vis;
|
||||
} else if (magr->mundetected) {
|
||||
magr->mundetected = 0;
|
||||
showit |= g.vis;
|
||||
}
|
||||
|
||||
if (g.vis) {
|
||||
if (!canspotmon(magr))
|
||||
map_invisible(magr->mx, magr->my);
|
||||
else if (showit)
|
||||
newsym(magr->mx, magr->my);
|
||||
if (!canspotmon(mdef))
|
||||
map_invisible(mdef->mx, mdef->my);
|
||||
if (M_AP_TYPE(mdef))
|
||||
seemimic(mdef);
|
||||
if (M_AP_TYPE(magr))
|
||||
seemimic(magr);
|
||||
else if (showit)
|
||||
newsym(mdef->mx, mdef->my);
|
||||
|
||||
fmt = (could_seduce(magr, mdef, mattk) && !magr->mcan)
|
||||
? "%s pretends to be friendly to"
|
||||
: "%s misses";
|
||||
@@ -381,9 +400,9 @@ register struct monst *magr, *mdef;
|
||||
|| mdef->data == &mons[PM_BROWN_PUDDING])
|
||||
&& (g.otmp && (objects[g.otmp->otyp].oc_material == IRON
|
||||
|| objects[g.otmp->otyp].oc_material == METAL))
|
||||
&& mdef->mhp > 1
|
||||
&& !mdef->mcan) {
|
||||
&& mdef->mhp > 1 && !mdef->mcan) {
|
||||
struct monst *mclone;
|
||||
|
||||
if ((mclone = clone_mon(mdef, 0, 0)) != 0) {
|
||||
if (g.vis && canspotmon(mdef)) {
|
||||
char buf[BUFSZ];
|
||||
@@ -425,6 +444,13 @@ register struct monst *magr, *mdef;
|
||||
break;
|
||||
|
||||
case AT_ENGL:
|
||||
if (mdef->data == &mons[PM_SHADE]) { /* no silver teeth... */
|
||||
if (g.vis)
|
||||
pline("%s attempt to engulf %s is futile.",
|
||||
s_suffix(Monnam(magr)), mon_nam(mdef));
|
||||
strike = 0;
|
||||
break;
|
||||
}
|
||||
if (u.usteed && mdef == u.usteed) {
|
||||
strike = 0;
|
||||
break;
|
||||
@@ -501,23 +527,49 @@ hitmm(magr, mdef, mattk)
|
||||
register struct monst *magr, *mdef;
|
||||
struct attack *mattk;
|
||||
{
|
||||
boolean weaponhit = ((mattk->aatyp == AT_WEAP
|
||||
|| (mattk->aatyp == AT_CLAW && g.otmp))),
|
||||
silverhit = (weaponhit && g.otmp
|
||||
&& objects[g.otmp->otyp].oc_material == SILVER),
|
||||
showit = FALSE;
|
||||
|
||||
/* unhiding or unmimicking happens even if hero can't see it
|
||||
because the formerly concealed monster is now in action */
|
||||
if (M_AP_TYPE(mdef)) {
|
||||
seemimic(mdef);
|
||||
showit |= g.vis;
|
||||
} else if (mdef->mundetected) {
|
||||
mdef->mundetected = 0;
|
||||
showit |= g.vis;
|
||||
}
|
||||
if (M_AP_TYPE(magr)) {
|
||||
seemimic(magr);
|
||||
showit |= g.vis;
|
||||
} else if (magr->mundetected) {
|
||||
magr->mundetected = 0;
|
||||
showit |= g.vis;
|
||||
}
|
||||
|
||||
if (g.vis) {
|
||||
int compat;
|
||||
char buf[BUFSZ];
|
||||
|
||||
if (!canspotmon(magr))
|
||||
map_invisible(magr->mx, magr->my);
|
||||
else if (showit)
|
||||
newsym(magr->mx, magr->my);
|
||||
if (!canspotmon(mdef))
|
||||
map_invisible(mdef->mx, mdef->my);
|
||||
if (M_AP_TYPE(mdef))
|
||||
seemimic(mdef);
|
||||
if (M_AP_TYPE(magr))
|
||||
seemimic(magr);
|
||||
else if (showit)
|
||||
newsym(mdef->mx, mdef->my);
|
||||
|
||||
if ((compat = could_seduce(magr, mdef, mattk)) && !magr->mcan) {
|
||||
Sprintf(buf, "%s %s", Monnam(magr),
|
||||
mdef->mcansee ? "smiles at" : "talks to");
|
||||
pline("%s %s %s.", buf, mon_nam(mdef),
|
||||
compat == 2 ? "engagingly" : "seductively");
|
||||
} else if (shade_miss(magr, mdef, g.otmp, FALSE, TRUE)) {
|
||||
return MM_MISS; /* bypass mdamagem() */
|
||||
} else {
|
||||
char magr_name[BUFSZ];
|
||||
|
||||
@@ -548,6 +600,28 @@ struct attack *mattk;
|
||||
Sprintf(buf, "%s hits", magr_name);
|
||||
}
|
||||
pline("%s %s.", buf, mon_nam_too(mdef, magr));
|
||||
|
||||
if (mon_hates_silver(mdef) && silverhit) {
|
||||
char *mdef_name = mon_nam_too(mdef, magr);
|
||||
|
||||
/* note: mon_nam_too returns a modifiable buffer; so
|
||||
does s_suffix, but it returns a single static buffer
|
||||
and we might be calling it twice for this message */
|
||||
Strcpy(magr_name, s_suffix(magr_name));
|
||||
if (!noncorporeal(mdef->data) && !amorphous(mdef->data)) {
|
||||
if (mdef != magr) {
|
||||
mdef_name = s_suffix(mdef_name);
|
||||
} else {
|
||||
(void) strsubst(mdef_name, "himself", "his own");
|
||||
(void) strsubst(mdef_name, "herself", "her own");
|
||||
(void) strsubst(mdef_name, "itself", "its own");
|
||||
}
|
||||
Strcat(mdef_name, " flesh");
|
||||
}
|
||||
|
||||
pline("%s %s sears %s!", magr_name, /*s_suffix(magr_name), */
|
||||
simpleonames(g.otmp), mdef_name);
|
||||
}
|
||||
}
|
||||
} else
|
||||
noises(magr, mattk);
|
||||
@@ -775,11 +849,12 @@ mdamagem(magr, mdef, mattk)
|
||||
register struct monst *magr, *mdef;
|
||||
register struct attack *mattk;
|
||||
{
|
||||
struct obj *obj;
|
||||
struct obj *obj, dmgwep;
|
||||
char buf[BUFSZ];
|
||||
struct permonst *pa = magr->data, *pd = mdef->data;
|
||||
int armpro, num, tmp = d((int) mattk->damn, (int) mattk->damd),
|
||||
res = MM_MISS;
|
||||
int armpro, num,
|
||||
tmp = d((int) mattk->damn, (int) mattk->damd),
|
||||
res = MM_MISS;
|
||||
boolean cancelled;
|
||||
|
||||
if ((touch_petrifies(pd) /* or flesh_petrifies() */
|
||||
@@ -882,15 +957,26 @@ register struct attack *mattk;
|
||||
case AD_HEAL:
|
||||
case AD_PHYS:
|
||||
physical:
|
||||
if (mattk->aatyp == AT_KICK && thick_skinned(pd)) {
|
||||
/* this shade check is necessary in case any attacks which
|
||||
dish out physical damage bypass hitmm() to get here */
|
||||
if ((mattk->aatyp == AT_WEAP || mattk->aatyp == AT_CLAW) && g.otmp)
|
||||
dmgwep = *g.otmp;
|
||||
else
|
||||
dmgwep = cg.zeroobj;
|
||||
|
||||
if (shade_miss(magr, mdef, &dmgwep, FALSE, TRUE)) {
|
||||
tmp = 0;
|
||||
} else if (mattk->aatyp == AT_WEAP) {
|
||||
} else if (mattk->aatyp == AT_KICK && thick_skinned(pd)) {
|
||||
tmp = 0;
|
||||
} else if (mattk->aatyp == AT_WEAP
|
||||
|| (mattk->aatyp == AT_CLAW && g.otmp)) {
|
||||
if (g.otmp) {
|
||||
struct obj *marmg;
|
||||
|
||||
if (g.otmp->otyp == CORPSE
|
||||
&& touch_petrifies(&mons[g.otmp->corpsenm]))
|
||||
goto do_stone;
|
||||
|
||||
tmp += dmgval(g.otmp, mdef);
|
||||
if ((marmg = which_armor(magr, W_ARMG)) != 0
|
||||
&& marmg->otyp == GAUNTLETS_OF_POWER)
|
||||
|
||||
13
src/mhitu.c
13
src/mhitu.c
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 mhitu.c $NHDT-Date: 1562800504 2019/07/10 23:15:04 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.166 $ */
|
||||
/* NetHack 3.6 mhitu.c $NHDT-Date: 1573688693 2019/11/13 23:44:53 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.167 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/*-Copyright (c) Robert Patrick Rankin, 2012. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -1789,8 +1789,7 @@ struct attack *mattk;
|
||||
|
||||
if (!engulf_target(mtmp, &g.youmonst))
|
||||
return 0;
|
||||
if ((t && is_pit(t->ttyp))
|
||||
&& sobj_at(BOULDER, u.ux, u.uy))
|
||||
if ((t && is_pit(t->ttyp)) && sobj_at(BOULDER, u.ux, u.uy))
|
||||
return 0;
|
||||
|
||||
if (Punished)
|
||||
@@ -1873,6 +1872,14 @@ struct attack *mattk;
|
||||
|
||||
if (mtmp != u.ustuck)
|
||||
return 0;
|
||||
if (Punished) {
|
||||
/* ball&chain are in limbo while swallowed; update their internal
|
||||
location to be at swallower's spot */
|
||||
if (uchain->where == OBJ_FREE)
|
||||
uchain->ox = mtmp->mx, uchain->oy = mtmp->my;
|
||||
if (uball->where == OBJ_FREE)
|
||||
uball->ox = mtmp->mx, uball->oy = mtmp->my;
|
||||
}
|
||||
if (u.uswldtim > 0)
|
||||
u.uswldtim -= 1;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 mthrowu.c $NHDT-Date: 1564767726 2019/08/02 17:42:06 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.85 $ */
|
||||
/* NetHack 3.6 mthrowu.c $NHDT-Date: 1573688695 2019/11/13 23:44:55 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.86 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/*-Copyright (c) Pasi Kallinen, 2016. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -346,6 +346,10 @@ boolean verbose; /* give message(s) even when you can't see what happened */
|
||||
damage = dmgval(otmp, mtmp);
|
||||
if (otmp->otyp == ACID_VENOM && resists_acid(mtmp))
|
||||
damage = 0;
|
||||
#if 0 /* can't use this because we don't have the attacker */
|
||||
if (is_orc(mtmp->data) && is_elf(?magr?))
|
||||
damage++;
|
||||
#endif
|
||||
if (ismimic)
|
||||
seemimic(mtmp);
|
||||
mtmp->msleeping = 0;
|
||||
@@ -376,10 +380,19 @@ boolean verbose; /* give message(s) even when you can't see what happened */
|
||||
}
|
||||
if (objects[otmp->otyp].oc_material == SILVER
|
||||
&& mon_hates_silver(mtmp)) {
|
||||
if (vis)
|
||||
pline_The("silver sears %s flesh!", s_suffix(mon_nam(mtmp)));
|
||||
else if (verbose && !g.mtarget)
|
||||
pline("Its flesh is seared!");
|
||||
boolean flesh = (!noncorporeal(mtmp->data)
|
||||
&& !amorphous(mtmp->data));
|
||||
|
||||
/* note: extra silver damage is handled by dmgval() */
|
||||
if (vis) {
|
||||
char *m_name = mon_nam(mtmp);
|
||||
|
||||
if (flesh) /* s_suffix returns a modifiable buffer */
|
||||
m_name = strcat(s_suffix(m_name), " flesh");
|
||||
pline_The("silver sears %s!", m_name);
|
||||
} else if (verbose && !g.mtarget) {
|
||||
pline("%s is seared!", flesh ? "Its flesh" : "It");
|
||||
}
|
||||
}
|
||||
if (otmp->otyp == ACID_VENOM && cansee(mtmp->mx, mtmp->my)) {
|
||||
if (resists_acid(mtmp)) {
|
||||
@@ -531,7 +544,12 @@ struct obj *obj; /* missile (or stack providing it) */
|
||||
while (range-- > 0) { /* Actually the loop is always exited by break */
|
||||
g.bhitpos.x += dx;
|
||||
g.bhitpos.y += dy;
|
||||
if ((mtmp = m_at(g.bhitpos.x, g.bhitpos.y)) != 0) {
|
||||
mtmp = m_at(g.bhitpos.x, g.bhitpos.y);
|
||||
if (mtmp && shade_miss(mon, mtmp, singleobj, TRUE, TRUE)) {
|
||||
/* if mtmp is a shade and missile passes harmlessly through it,
|
||||
give message and skip it in order to keep going */
|
||||
mtmp = (struct monst *) 0;
|
||||
} else if (mtmp) {
|
||||
if (ohitmon(mtmp, singleobj, range, TRUE))
|
||||
break;
|
||||
} else if (g.bhitpos.x == u.ux && g.bhitpos.y == u.uy) {
|
||||
@@ -746,7 +764,7 @@ struct attack *mattk;
|
||||
break;
|
||||
default:
|
||||
impossible("bad attack type in spitmu");
|
||||
/* fall through */
|
||||
/*FALLTHRU*/
|
||||
case AD_ACID:
|
||||
otmp = mksobj(ACID_VENOM, TRUE, FALSE);
|
||||
break;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 options.c $NHDT-Date: 1572303730 2019/10/28 23:02:10 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.383 $ */
|
||||
/* NetHack 3.6 options.c $NHDT-Date: 1573505739 2019/11/11 20:55:39 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.386 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/*-Copyright (c) Michael Allison, 2008. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -5367,44 +5367,6 @@ boolean setinitial, setfromfile;
|
||||
tmpwin = create_nhwindow(NHW_MENU);
|
||||
start_menu(tmpwin);
|
||||
any = cg.zeroany;
|
||||
#ifdef CURSES_GRAPHICS /* this ought to be handled within curses... */
|
||||
/*
|
||||
* Symbol sets are formatted in two columns, "name description",
|
||||
* on selectable lines. curses bases menu width on the length
|
||||
* of non-selectable lines (main header, separators if present,
|
||||
* with trailing spaces ignored) and defaults to half the map.
|
||||
* Without something like this separator (shown after the menu
|
||||
* title and a blank line which follows that) to force a wider
|
||||
* menu, entries with long descriptions wrap. That would be
|
||||
* ok if wrapping operated on the same two columns, but the
|
||||
* menu doesn't know anything about those and the description
|
||||
* is wrapping into the next line's name column, making long
|
||||
* descriptions--and menus containing them--hard to read.
|
||||
*/
|
||||
if (WINDOWPORT("curses")) {
|
||||
char tmp1[BUFSZ], tmp2[BUFSZ], bigbuf[BUFSZ + 1 + BUFSZ];
|
||||
|
||||
/* 4: room for space+letter+paren+space, fake selector;
|
||||
2: added to 'biggest' when constructing 'fmtstr';
|
||||
1: space between symset name+2 and symset description */
|
||||
if (4 + biggest + 2 + 1 > (int) sizeof tmp1 - 1)
|
||||
biggest = (int) sizeof tmp1 - 1 - (4 + 2 + 1);
|
||||
(void) memset((genericptr_t) tmp1, '-', biggest);
|
||||
tmp1[biggest] = '\0';
|
||||
if (big_desc > (int) sizeof tmp2 - 1)
|
||||
big_desc = (int) sizeof tmp2 - 1;
|
||||
(void) memset((genericptr_t) tmp2, '-', big_desc);
|
||||
tmp2[big_desc] = '\0';
|
||||
Sprintf(bigbuf, "%4s", "");
|
||||
Sprintf(eos(bigbuf), fmtstr, tmp1, tmp2);
|
||||
bigbuf[BUFSZ - 1] = '\0';
|
||||
any.a_int = 0;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
bigbuf, MENU_UNSELECTED);
|
||||
}
|
||||
#else
|
||||
nhUse(big_desc);
|
||||
#endif
|
||||
any.a_int = 1; /* -1 + 2 [see 'if (sl->name) {' below]*/
|
||||
if (!symset_name)
|
||||
defindx = any.a_int;
|
||||
|
||||
62
src/uhitm.c
62
src/uhitm.c
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 uhitm.c $NHDT-Date: 1567805813 2019/09/06 21:36:53 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.212 $ */
|
||||
/* NetHack 3.6 uhitm.c $NHDT-Date: 1573764936 2019/11/14 20:55:36 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.215 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/*-Copyright (c) Robert Patrick Rankin, 2012. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -691,10 +691,8 @@ int dieroll;
|
||||
long silverhit = 0L;
|
||||
int wtype;
|
||||
struct obj *monwep;
|
||||
char unconventional[BUFSZ]; /* substituted for word "attack" in msg */
|
||||
char saved_oname[BUFSZ];
|
||||
|
||||
unconventional[0] = '\0';
|
||||
saved_oname[0] = '\0';
|
||||
|
||||
wakeup(mon, TRUE);
|
||||
@@ -867,7 +865,6 @@ int dieroll;
|
||||
} else {
|
||||
if (mdat == &mons[PM_SHADE] && !shade_aware(obj)) {
|
||||
tmp = 0;
|
||||
Strcpy(unconventional, cxname(obj));
|
||||
} else {
|
||||
switch (obj->otyp) {
|
||||
case BOULDER: /* 1d20 */
|
||||
@@ -1138,21 +1135,14 @@ int dieroll;
|
||||
poiskilled = TRUE;
|
||||
}
|
||||
if (tmp < 1) {
|
||||
boolean mon_is_shade = (mon->data == &mons[PM_SHADE]);
|
||||
|
||||
/* make sure that negative damage adjustment can't result
|
||||
in inadvertently boosting the victim's hit points */
|
||||
tmp = 0;
|
||||
if (mdat == &mons[PM_SHADE]) {
|
||||
if (!hittxt) {
|
||||
const char *what = *unconventional ? unconventional : "attack";
|
||||
|
||||
Your("%s %s harmlessly through %s.", what,
|
||||
vtense(what, "pass"), mon_nam(mon));
|
||||
hittxt = TRUE;
|
||||
}
|
||||
} else {
|
||||
if (get_dmg_bonus)
|
||||
tmp = 1;
|
||||
}
|
||||
tmp = (get_dmg_bonus && !mon_is_shade) ? 1 : 0;
|
||||
if (mon_is_shade && !hittxt
|
||||
&& thrown != HMON_THROWN && thrown != HMON_KICKED)
|
||||
hittxt = shade_miss(&g.youmonst, mon, obj, FALSE, TRUE);
|
||||
}
|
||||
|
||||
if (jousting) {
|
||||
@@ -1362,6 +1352,44 @@ struct obj *obj;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* used for hero vs monster and monster vs monster; also handles
|
||||
monster vs hero but that won't happen because hero can't be a shade */
|
||||
boolean
|
||||
shade_miss(magr, mdef, obj, thrown, verbose)
|
||||
struct monst *magr, *mdef;
|
||||
struct obj *obj;
|
||||
boolean thrown, verbose;
|
||||
{
|
||||
const char *what, *whose, *target;
|
||||
boolean youagr = (magr == &g.youmonst), youdef = (mdef == &g.youmonst);
|
||||
|
||||
/* we're using dmgval() for zero/not-zero, not for actual damage amount */
|
||||
if (mdef->data != &mons[PM_SHADE] || (obj && dmgval(obj, mdef)))
|
||||
return FALSE;
|
||||
|
||||
if (verbose
|
||||
&& ((youdef || cansee(mdef->mx, mdef->my) || sensemon(mdef))
|
||||
|| (magr == &g.youmonst && distu(mdef->mx, mdef->my) <= 2))) {
|
||||
static const char harmlessly_thru[] = " harmlessly through ";
|
||||
|
||||
what = (!obj || shade_aware(obj)) ? "attack" : cxname(obj);
|
||||
target = youdef ? "you" : mon_nam(mdef);
|
||||
if (!thrown) {
|
||||
whose = youagr ? "Your" : s_suffix(Monnam(magr));
|
||||
pline("%s %s %s%s%s.", whose, what,
|
||||
vtense(what, "pass"), harmlessly_thru, target);
|
||||
} else {
|
||||
pline("%s %s%s%s.", The(what), /* note: not pline_The() */
|
||||
vtense(what, "pass"), harmlessly_thru, target);
|
||||
}
|
||||
if (!youdef && !canspotmon(mdef))
|
||||
map_invisible(mdef->mx, mdef->my);
|
||||
}
|
||||
if (!youdef)
|
||||
mdef->msleeping = 0;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* check whether slippery clothing protects from hug or wrap attack */
|
||||
/* [currently assumes that you are the attacker] */
|
||||
static boolean
|
||||
|
||||
13
src/zap.c
13
src/zap.c
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 zap.c $NHDT-Date: 1561927499 2019/06/30 20:44:59 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.312 $ */
|
||||
/* NetHack 3.6 zap.c $NHDT-Date: 1573688696 2019/11/13 23:44:56 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.316 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/*-Copyright (c) Robert Patrick Rankin, 2013. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -3341,13 +3341,20 @@ struct obj **pobj; /* object tossed/used, set to NULL
|
||||
if (range > 3) /* another bounce? */
|
||||
skiprange(range, &skiprange_start, &skiprange_end);
|
||||
} else if (mtmp && M_IN_WATER(mtmp->data)) {
|
||||
if ((!Blind && canseemon(mtmp)) || sensemon(mtmp))
|
||||
if (!Blind && canspotmon(mtmp))
|
||||
pline("%s %s over %s.", Yname2(obj), otense(obj, "pass"),
|
||||
mon_nam(mtmp));
|
||||
mtmp = (struct monst *) 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (mtmp && !(in_skip && M_IN_WATER(mtmp->data))) {
|
||||
/* if mtmp is a shade and missile passes harmlessly through it,
|
||||
give message and skip it in order to keep going */
|
||||
if (mtmp && (weapon == THROWN_WEAPON || weapon == KICKED_WEAPON)
|
||||
&& shade_miss(&g.youmonst, mtmp, obj, TRUE, TRUE))
|
||||
mtmp = (struct monst *) 0;
|
||||
|
||||
if (mtmp) {
|
||||
g.notonhead = (g.bhitpos.x != mtmp->mx || g.bhitpos.y != mtmp->my);
|
||||
if (weapon == FLASHED_LIGHT) {
|
||||
/* FLASHED_LIGHT hitting invisible monster should
|
||||
|
||||
709
sys/msdos/Makefile1.cross
Normal file
709
sys/msdos/Makefile1.cross
Normal file
@@ -0,0 +1,709 @@
|
||||
# NetHack 3.6 Makefile1.cross
|
||||
# Cross-compile msdos version of NetHack using a
|
||||
# linux-hosted djgpp cross-compiler.
|
||||
#
|
||||
# Makefile1.cross (this file) is for the host-side obj files and
|
||||
# utilities that will run on the host platform only.
|
||||
#
|
||||
# Makefile2.cross is the the target platform obj files
|
||||
# and utilities.
|
||||
#
|
||||
# Makefile2 utilizes the djgpp cross-compiler from Andrew Wu:
|
||||
# https://github.com/andrewwutw/build-djgpp
|
||||
#
|
||||
# Currently, in NetHack 3.6, the cross-compile for msdos cannot be
|
||||
# used to build the entire game to a playable point but it is useful
|
||||
# for testing the msdos port build of the evolving NetHack code.0
|
||||
#
|
||||
# The GNU Make has a problem if you include a drive spec below.
|
||||
GAMEDIR =../binary
|
||||
|
||||
#
|
||||
#==============================================================================
|
||||
# This marks the end of the BUILD DECISIONS section.
|
||||
#==============================================================================
|
||||
#
|
||||
# Directories, gcc likes unix style directory specs
|
||||
#
|
||||
|
||||
OBJ = o
|
||||
HOBJ = host_o
|
||||
DAT = ../dat
|
||||
DOC = ../doc
|
||||
INCL = ../include
|
||||
MSYS = ../sys/msdos
|
||||
SRC = ../src
|
||||
SSHR = ../sys/share
|
||||
UTIL = ../util
|
||||
WIN = ../win/tty
|
||||
WCURSES = ../win/curses
|
||||
WSHR = ../win/share
|
||||
|
||||
#
|
||||
# Executables.
|
||||
#
|
||||
HOST_CC = gcc
|
||||
HOST_LINK = gcc
|
||||
MAKEBIN = make
|
||||
|
||||
#
|
||||
# Special libraries and how to link them in.
|
||||
#
|
||||
LIBS = -lpc
|
||||
LIBRARIES = $(LIBS)
|
||||
|
||||
#
|
||||
# Yacc/Lex off
|
||||
#
|
||||
YACC_LEX = N
|
||||
|
||||
#
|
||||
# Uncomment the line below if you want to store all the level files,
|
||||
# help files, etc. in a single library file.
|
||||
#
|
||||
USE_DLB = Y
|
||||
|
||||
#===============================================
|
||||
#======= End of Modification Section ===========
|
||||
#===============================================
|
||||
################################################
|
||||
# #
|
||||
# Nothing below here should have to be changed.#
|
||||
# #
|
||||
################################################
|
||||
|
||||
# Changing this conditional block is not recommended
|
||||
ifeq "$(USE_DLB)" "Y"
|
||||
DLBFLG = -DDLB
|
||||
else
|
||||
DLBFLG =
|
||||
endif
|
||||
|
||||
TERMLIB =
|
||||
|
||||
#==========================================
|
||||
#================ MACROS ==================
|
||||
#==========================================
|
||||
# This section creates shorthand macros for many objects
|
||||
# referenced later on in the Makefile.
|
||||
#
|
||||
# Have windows path styles available for use in commands
|
||||
#
|
||||
W_OBJ =$(subst /,\, $(OBJ))
|
||||
W_INCL =$(subst /,\, $(INCL))
|
||||
W_DAT =$(subst /,\, $(DAT))
|
||||
W_DOC =$(subst /,\, $(DOC))
|
||||
W_UTIL =$(subst /,\, $(UTIL))
|
||||
W_SRC =$(subst /,\, $(SRC))
|
||||
W_SSYS =$(subst /,\, $(SSYS))
|
||||
W_MSWSYS =$(subst /,\, $(MSWSYS))
|
||||
W_TTY =$(subst /,\, $(TTY))
|
||||
W_MSWIN =$(subst /,\, $(MSWIN))
|
||||
ifeq "$(ADD_CURSES)" "Y"
|
||||
W_WCURSES =$(subst /,\, $(WCURSES))
|
||||
endif
|
||||
W_WSHR =$(subst /,\, $(WSHR))
|
||||
W_GAMEDIR =$(subst /,\, $(GAMEDIR))
|
||||
|
||||
#
|
||||
# Shorten up the location for some files
|
||||
#
|
||||
|
||||
O = $(OBJ)/
|
||||
HOST_O = $(HOBJ)/
|
||||
U = $(UTIL)/
|
||||
|
||||
#==========================================
|
||||
# Utility Objects.
|
||||
#==========================================
|
||||
|
||||
MAKESRC = makedefs.c
|
||||
|
||||
MAKEDEFSOBJS = $(HOST_O)makedefs.o $(HOST_O)monst.o $(HOST_O)objects.o
|
||||
|
||||
#SPLEVSRC = lev_yacc.c lev_$(LEX).c lev_main.c panic.c
|
||||
#DGNCOMPSRC = dgn_yacc.c dgn_$(LEX).c dgn_main.c
|
||||
#SPLEVOBJS = $(HOST_O)lev_yacc.o $(HOST_O)lev_$(LEX).o $(HOST_O)lev_main.o $(HOST_O)alloc.o \
|
||||
# $(HOST_O)monst.o $(HOST_O)objects.o $(HOST_O)panic.o \
|
||||
# $(HOST_O)drawing.o $(HOST_O)decl.o $(HOST_O)stubvid.o
|
||||
#DGNCOMPOBJS = $(HOST_O)dgn_yacc.o $(HOST_O)dgn_$(LEX).o $(HOST_O)dgn_main.o $(HOST_O)alloc.o \
|
||||
# $(HOST_O)panic.o
|
||||
|
||||
#==========================================
|
||||
# Tile related object files.
|
||||
#==========================================
|
||||
|
||||
TILOBJ = $(HOST_O)tile.o $(VGAOBJ)
|
||||
|
||||
TILOBJ2 = $(HOST_O)tileset.o $(HOST_O)bmptiles.o $(HOST_O)giftiles.o
|
||||
|
||||
TEXTIO = $(HOST_O)tiletext.o $(HOST_O)tiletxt.o $(HOST_O)drawing.o $(HOST_O)decl.o $(HOST_O)monst.o \
|
||||
$(HOST_O)objects.o
|
||||
|
||||
TEXTIO2 = $(HOST_O)tiletex2.o $(HOST_O)tiletxt2.o $(HOST_O)drawing.o $(HOST_O)decl.o $(HOST_O)monst.o \
|
||||
$(HOST_O)objects.o
|
||||
|
||||
TILE_BMP = $(DAT)/nhtiles.bmp
|
||||
|
||||
TILEUTIL = $(TILOBJ) $(U)tile2bin $(U)til2bin2 $(TILE_BMP)
|
||||
|
||||
TILEFILES = $(WSHR)/monsters.txt $(WSHR)/objects.txt $(WSHR)/other.txt
|
||||
|
||||
TILEFILES2 = $(WSHR)/monthin.txt $(WSHR)/objthin.txt $(WSHR)/oththin.txt
|
||||
|
||||
GIFREADERS = $(HOST_O)gifread.o $(HOST_O)alloc.o $(HOST_O)panic.o
|
||||
|
||||
GIFREAD2 = $(HOST_O)gifread2.o $(HOST_O)alloc.o $(HOST_O)panic.o
|
||||
|
||||
PPMWRITERS = $(HOST_O)ppmwrite.o $(HOST_O)alloc.o $(HOST_O)panic.o
|
||||
|
||||
PPMWRIT2 = $(HOST_O)ppmwrit2.o $(HOST_O)alloc.o $(HOST_O)panic.o
|
||||
|
||||
#==========================================
|
||||
# Object files.
|
||||
#==========================================
|
||||
|
||||
DLBOBJ = $(HOST_O)dlb.o
|
||||
|
||||
ALLOBJ = $(MAKEDEFSOBJS) $(TILOBJ) $(TILOBJ2) $(TEXTIO) $(TEXTIO2)
|
||||
|
||||
#==========================================
|
||||
# Header file macros
|
||||
#==========================================
|
||||
|
||||
PATCHLEV_H = $(INCL)/patchlev.h
|
||||
DGN_FILE_H = $(INCL)/align.h $(INCL)/dgn_file.h
|
||||
DUNGEON_H = $(INCL)/align.h $(INCL)/dungeon.h
|
||||
MONDATA_H = $(INCL)/align.h $(INCL)/mondata.h
|
||||
MONST_H = $(INCL)/align.h $(INCL)/monst.h $(INCL)/mextra.h
|
||||
PERMONST_H = $(INCL)/monattk.h $(INCL)/monflag.h $(INCL)/align.h \
|
||||
$(INCL)/permonst.h
|
||||
REGION_H = $(INCL)/region.h
|
||||
RM_H = $(INCL)/align.h $(INCL)/rm.h
|
||||
SKILLS_H = $(INCL)/skills.h
|
||||
SP_LEV_H = $(INCL)/align.h $(INCL)/sp_lev.h
|
||||
YOUPROP_H = $(PERMONST_H) $(MONDATA_H) $(INCL)/prop.h \
|
||||
$(INCL)/pm.h $(INCL)/youprop.h
|
||||
YOU_H = $(MONST_H) $(YOUPROP_H) $(INCL)/align.h \
|
||||
$(INCL)/attrib.h $(INCL)/you.h
|
||||
DISPLAY_H = $(MONDATA_H) $(INCL)/vision.h $(INCL)/display.h
|
||||
PCCONF_H = $(INCL)/micro.h $(INCL)/system.h $(INCL)/pcconf.h \
|
||||
$(MSYS)/pcvideo.h
|
||||
CONFIG_H = $(GLOBAL_H) $(INCL)/tradstdc.h $(INCL)/config1.h \
|
||||
$(INCL)/config.h
|
||||
DECL_H = $(YOU_H) $(INCL)/spell.h $(INCL)/color.h \
|
||||
$(INCL)/obj.h $(INCL)/onames.h $(INCL)/pm.h \
|
||||
$(INCL)/decl.h
|
||||
GLOBAL_H = $(PCCONF_H) $(INCL)/coord.h $(INCL)/global.h
|
||||
HACK_H = $(CONFIG_H) $(INCL)/context.h $(DUNGEON_H) \
|
||||
$(DECL_H) $(DISPLAY_H) $(INCL)/monsym.h \
|
||||
$(INCL)/mkroom.h $(INCL)/objclass.h $(INCL)/trap.h \
|
||||
$(INCL)/flag.h $(RM_H) $(INCL)/vision.h \
|
||||
$(INCL)/wintype.h $(INCL)/engrave.h $(INCL)/rect.h \
|
||||
$(INCL)/trampoli.h $(INCL)/hack.h $(REGION_H) \
|
||||
$(INCL)/sys.h
|
||||
DLB_H = $(INCL)/dlb.h
|
||||
|
||||
ifeq ($(SUPPRESS_GRAPHICS),Y)
|
||||
TILE_H =
|
||||
else
|
||||
TILE_H = $(WSHR)/tile.h $(INCL)/tileset.h
|
||||
endif
|
||||
|
||||
ifeq ($(USE_DLB),Y)
|
||||
DLB = dlb
|
||||
DLBOBJS = $(HOST_O)dlb_main.o $(HOST_O)dlb.o $(HOST_O)alloc.o $(HOST_O)panic.o
|
||||
else
|
||||
DLB =
|
||||
DLBOBJS =
|
||||
endif
|
||||
|
||||
#==========================================
|
||||
# More compiler setup macros
|
||||
#==========================================
|
||||
#
|
||||
CURSESDEF=
|
||||
CURSESLIB=
|
||||
INCLDIR=-I../include -I../sys/msdos
|
||||
# Debugging
|
||||
#cflags = -pg -c $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DSUPPRESS_GRAPHICS
|
||||
#LFLAGS = -pg
|
||||
#
|
||||
cflags = -c -O $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DSUPPRESS_GRAPHICS
|
||||
LFLAGS =
|
||||
#
|
||||
# Debugging
|
||||
#cflags = -g -c $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DUSE_TILES
|
||||
#LFLAGS = -g
|
||||
#
|
||||
# Normal
|
||||
cflags = -c -O $(INCLDIR) $(DLBFLG) $(CURSESDEF) -DUSE_TILES
|
||||
LFLAGS =
|
||||
|
||||
#==========================================
|
||||
#================ RULES ==================
|
||||
#==========================================
|
||||
|
||||
.SUFFIXES: .o .til .uu .c .y .l
|
||||
|
||||
#==========================================
|
||||
# Rules for host files in src
|
||||
#==========================================
|
||||
|
||||
$(HOST_O)%.o : $(SRC)/%.c
|
||||
$(HOST_CC) $(cflags) -o$@ $<
|
||||
|
||||
#==========================================
|
||||
# Rules for host files in sys/msdos
|
||||
#==========================================
|
||||
|
||||
$(HOST_O)%.o : $(MSYS)/%.c
|
||||
$(HOST_CC) $(cflags) -I../sys/msdos -o$@ $<
|
||||
|
||||
#==========================================
|
||||
# Rules for host files in util
|
||||
#==========================================
|
||||
|
||||
$(HOST_O)%.o : $(SRC)/%.c
|
||||
$(HOST_CC) $(cflags) -o$@ $<
|
||||
|
||||
$(HOST_O)%.o : %.c
|
||||
$(HOST_CC) $(cflags) -o$@ $<
|
||||
|
||||
#==========================================
|
||||
# Rules for host files in win/share
|
||||
#==========================================
|
||||
|
||||
$(HOST_O)%.o : $(WSHR)/%.c
|
||||
$(HOST_CC) $(cflags) -I../win/share -o$@ $<
|
||||
|
||||
#==========================================
|
||||
# Primary Targets.
|
||||
#==========================================
|
||||
|
||||
# The default target.
|
||||
|
||||
all : prereq
|
||||
|
||||
prereq: $(HOST_O)prereq.tag
|
||||
@echo Done.
|
||||
|
||||
default: prereq
|
||||
|
||||
util: $(HOST_O)utility.tag
|
||||
|
||||
$(HOST_O)utility.tag: $(INCL)/date.h $(INCL)/trap.h $(INCL)/onames.h \
|
||||
$(INCL)/pm.h vis_tab.c $(TILEUTIL)
|
||||
echo host utilities made > $@
|
||||
|
||||
tileutil: $(U)gif2txt $(U)txt2ppm
|
||||
@echo Optional tile development utilities are up to date.
|
||||
|
||||
$(HOST_O)prereq.tag: hobj.tag $(U)makedefs $(HOST_O)utility.tag \
|
||||
$(HOST_O)thintile.tag $(DAT)/nhdat
|
||||
echo prereq done >$@
|
||||
|
||||
#==========================================
|
||||
# Other host targets.
|
||||
#==========================================
|
||||
|
||||
#note that dir below assumes bin/dir from djgpp distribution
|
||||
#
|
||||
$(DAT)/nhdat: $(U)dlb_main $(DAT)/data $(DAT)/rumors \
|
||||
$(DAT)/oracles $(DAT)/quest.dat \
|
||||
$(DAT)/bogusmon $(DAT)/engrave $(DAT)/epitaph $(DAT)/tribute
|
||||
cd $(DAT); \
|
||||
pwd; \
|
||||
cp $(MSYS)/msdoshlp.txt .; \
|
||||
ls -1 data oracles options quest.dat rumors help hh >dlb.lst; \
|
||||
ls -1 cmdhelp history opthelp wizhelp license >>dlb.lst; \
|
||||
ls -1 bogusmon engrave epitaph tribute msdoshlp.txt >>dlb.lst; \
|
||||
$(U)dlb_main cvIf dlb.lst nhdat
|
||||
cd $(SRC)
|
||||
|
||||
$(U)dlb_main: $(DLBOBJS)
|
||||
$(HOST_LINK) $(LFLAGS) -o$@ $(DLBOBJS)
|
||||
|
||||
$(HOST_O)dlb_main.o: $(U)dlb_main.c $(INCL)/config.h $(DLB_H)
|
||||
$(HOST_CC) $(cflags) -o$@ $(U)dlb_main.c
|
||||
|
||||
|
||||
$(INCL)/date.h : $(U)makedefs
|
||||
-$(U)makedefs -v
|
||||
|
||||
$(INCL)/onames.h: $(U)makedefs
|
||||
-$(U)makedefs -o
|
||||
|
||||
$(INCL)/pm.h: $(U)makedefs
|
||||
-$(U)makedefs -p
|
||||
|
||||
#monstr.c: $(U)makedefs
|
||||
# -$(U)makedefs -m
|
||||
|
||||
$(INCL)/vis_tab.h: $(U)makedefs
|
||||
-$(U)makedefs -z
|
||||
|
||||
vis_tab.c: $(U)makedefs
|
||||
-$(U)makedefs -z
|
||||
|
||||
# make data.base an 8.3 filename to prevent an make warning
|
||||
DATABASE = $(DAT)/data.bas
|
||||
|
||||
$(DAT)/data: $(HOST_O)utility.tag $(DATABASE)
|
||||
$(U)makedefs -d
|
||||
|
||||
$(DAT)/rumors: $(HOST_O)utility.tag $(DAT)/rumors.tru $(DAT)/rumors.fal
|
||||
$(U)makedefs -r
|
||||
|
||||
$(DAT)/quest.dat: $(HOST_O)utility.tag $(DAT)/quest.txt
|
||||
$(U)makedefs -q
|
||||
|
||||
$(DAT)/oracles: $(HOST_O)utility.tag $(DAT)/oracles.txt
|
||||
$(U)makedefs -h
|
||||
|
||||
$(DAT)/bogusmon: $(HOST_O)utility.tag $(DAT)/bogusmon.txt
|
||||
$(U)makedefs -s
|
||||
|
||||
$(DAT)/engrave: $(HOST_O)utility.tag $(DAT)/engrave.txt
|
||||
$(U)makedefs -s
|
||||
|
||||
$(DAT)/epitaph: $(HOST_O)utility.tag $(DAT)/epitaph.txt
|
||||
$(U)makedefs -s
|
||||
|
||||
#===============================================
|
||||
# Create directory for holding host object files
|
||||
#===============================================
|
||||
|
||||
hobj.tag:
|
||||
mkdir -p ./$(HOBJ)
|
||||
echo directory ready ./$(HOBJ)
|
||||
|
||||
#==========================================
|
||||
# Makedefs Stuff
|
||||
#==========================================
|
||||
|
||||
$(U)makedefs: $(MAKEDEFSOBJS)
|
||||
$(HOST_LINK) $(LFLAGS) -o$@ $(MAKEDEFSOBJS)
|
||||
|
||||
$(HOST_O)makedefs.o: $(CONFIG_H) $(PERMONST_H) $(INCL)/objclass.h \
|
||||
$(INCL)/monsym.h $(INCL)/qtext.h $(U)makedefs.c
|
||||
$(HOST_CC) $(cflags) -o$@ $(U)makedefs.c
|
||||
|
||||
#==========================================
|
||||
# Level Compiler Dependencies
|
||||
#==========================================
|
||||
|
||||
#$(U)lev_comp: $(SPLEVOBJS)
|
||||
# -rm -f temp.a
|
||||
# ar r temp.a $(SPLEVOBJS)
|
||||
# $(HOST_LINK) $(LFLAGS) -o$@ temp.a
|
||||
#
|
||||
#$(HOST_O)lev_yacc.o: $(HACK_H) $(SP_LEV_H) $(INCL)/lev_comp.h $(U)lev_yacc.c
|
||||
# $(HOST_CC) $(cflags) -o$@ $(U)lev_yacc.c
|
||||
#
|
||||
#$(HOST_O)lev_$(LEX).o: $(HACK_H) $(SP_LEV_H) $(INCL)/lev_comp.h \
|
||||
# $(U)lev_$(LEX).c
|
||||
# $(HOST_CC) $(cflags) -o$@ $(U)lev_$(LEX).c
|
||||
#
|
||||
#$(HOST_O)lev_main.o: $(HACK_H) $(INCL)/sp_lev.h $(INCL)/date.h $(U)lev_main.c
|
||||
#
|
||||
#$(U)lev_yacc.c: $(SSHR)/lev_yacc.c
|
||||
# @echo ---
|
||||
# @echo For now, we will copy the prebuilt
|
||||
# @echo lev_comp.c from $(SSHR) into $(U) and use that.
|
||||
# @cp $(SSHR)/lev_yacc.c $(U)lev_yacc.c
|
||||
# @echo.>>$(U)lev_yacc.c
|
||||
#
|
||||
#$(INCL)/lev_comp.h : $(SSHR)/lev_comp.h
|
||||
# @echo For now, we will copy the prebuilt lev_comp.h
|
||||
# @echo from $(SSHR) into $(INCL) and use that.
|
||||
# @cp $(SSHR)/lev_comp.h $@
|
||||
#$(U)lev_lex.c: $(SSHR)/lev_lex.c
|
||||
# @echo.>>$(INCL)/lev_comp.h
|
||||
# @echo For now, we will copy the prebuilt lev_lex.c
|
||||
# @echo from $(SSHR) into $(U) and use it.
|
||||
# @cp $(SSHR)/lev_lex.c $@
|
||||
# @echo.>>$@
|
||||
|
||||
#==========================================
|
||||
# Dungeon Dependencies
|
||||
#==========================================
|
||||
|
||||
#$(U)dgn_comp: $(DGNCOMPOBJS)
|
||||
# $(HOST_LINK) $(LFLAGS) -o$@ $(DGNCOMPOBJS)
|
||||
#
|
||||
#$(U)dgn_yacc.c: $(SSHR)/dgn_yacc.c
|
||||
# @echo ---
|
||||
# @echo For now, we will copy the prebuilt $(U)dgn_yacc.c and
|
||||
# @echo dgn_comp.h from $(SSHR) into $(U) and use that.
|
||||
# @cp $(SSHR)/dgn_yacc.c $(U)dgn_yacc.c
|
||||
# @echo.>>$(U)dgn_yacc.c
|
||||
#
|
||||
#$(INCL)/dgn_comp.h: $(SSHR)/dgn_comp.h
|
||||
# @echo ---
|
||||
# @echo For now, we will copy the prebuilt dgn_comp.h
|
||||
# @echo from $(SSHR) into $(INCL) and use that.
|
||||
# @cp $(SSHR)/dgn_comp.h $@
|
||||
# @echo.>>$(INCL)/dgn_comp.h
|
||||
#
|
||||
#$(U)dgn_$(LEX).c: $(SSHR)/dgn_lex.c $(INCL)/dgn_comp.h
|
||||
# @echo ---
|
||||
# @echo For now, we will copy the prebuilt dgn_lex.c
|
||||
# @echo from $(SSHR) into $(U) and use it.
|
||||
# @cp $(SSHR)/dgn_lex.c $@
|
||||
# @echo.>>$@
|
||||
|
||||
#==========================================
|
||||
# Header file moves required for tile support
|
||||
#==========================================
|
||||
|
||||
ifeq ($(SUPPRESS_GRAPHICS),Y)
|
||||
|
||||
else
|
||||
#
|
||||
# Tile Mapping
|
||||
#
|
||||
|
||||
$(SRC)/tile.c: $(U)tilemap
|
||||
@$(U)tilemap
|
||||
@echo A new $@ has been created
|
||||
|
||||
$(U)tilemap: $(HOST_O)tilemap.o
|
||||
$(HOST_LINK) $(LFLAGS) -o$@ $(HOST_O)tilemap.o
|
||||
|
||||
$(HOST_O)tilemap.o: $(WSHR)/tilemap.c $(HACK_H) $(TILE_H)
|
||||
$(HOST_CC) $(cflags) -I$(WSHR) -I$(MSYS) -o$@ $(WSHR)/tilemap.c
|
||||
|
||||
|
||||
#==========================================
|
||||
# Tile Utilities
|
||||
# Required for tile support
|
||||
#==========================================
|
||||
|
||||
$(DAT)/nhtiles.bmp: $(TILEFILES) $(U)tile2bmp
|
||||
@echo Creating binary tile files which may take some time
|
||||
@cd $(DAT)
|
||||
@$(U)tile2bmp $@
|
||||
@cd $(SRC)
|
||||
|
||||
$(U)tile2bmp: $(HOST_O)tile2bmp.o $(TEXTIO)
|
||||
-rm -f temp.a
|
||||
ar r temp.a $(TEXTIO)
|
||||
$(HOST_LINK) $(LFLAGS) -o$@ $(HOST_O)tile2bmp.o temp.a
|
||||
|
||||
$(U)tile2bin: $(HOST_O)tile2bin.o $(TEXTIO)
|
||||
-rm -f temp.a
|
||||
ar r temp.a $(TEXTIO)
|
||||
$(HOST_LINK) $(LFLAGS) -o$@ $(HOST_O)tile2bin.o temp.a
|
||||
|
||||
$(U)til2bin2: $(HOST_O)til2bin2.o $(TEXTIO2)
|
||||
-rm -f temp.a
|
||||
ar r temp.a $(TEXTIO2)
|
||||
$(HOST_LINK) $(LFLAGS) -o$@ $(HOST_O)til2bin2.o temp.a
|
||||
|
||||
$(U)thintile: $(HOST_O)thintile.o
|
||||
$(HOST_LINK) $(LFLAGS) -o$@ $(HOST_O)thintile.o
|
||||
|
||||
#$(HOST_O)thintile.o: $(HACK_H) $(WSHR)/tile.h $(WSHR)/thintile.c
|
||||
# -rm -f temp.a
|
||||
# ar r temp.a $(TEXTIO)
|
||||
# $(HOST_LINK) $(LFLAGS) -o$@ $(HOST_O)tile2bmp.o temp.a
|
||||
|
||||
$(HOST_O)thintile.o: $(HACK_H) $(WSHR)/tile.h $(WSHR)/thintile.c
|
||||
$(HOST_CC) $(cflags) -I$(MSYS) -I$(WSHR) -DTILE -DOVERVIEW_FILE -o$@ $(WSHR)/thintile.c
|
||||
|
||||
$(HOST_O)thintile.tag: $(U)thintile $(TILEFILES)
|
||||
$(U)thintile
|
||||
echo thintiles created >$@
|
||||
|
||||
$(HOST_O)tile2bmp.o: $(HACK_H) $(TILE_H) $(WSHR)/tile2bmp.c
|
||||
$(HOST_CC) $(cflags) -I$(MSYS) -I$(WSHR) -o$@ $(WSHR)/tile2bmp.c
|
||||
|
||||
$(HOST_O)tile2bin.o: $(HACK_H) $(TILE_H) $(MSYS)/pctiles.h $(MSYS)/pcvideo.h $(MSYS)/tile2bin.c
|
||||
$(HOST_CC) $(cflags) -I$(MSYS) -I$(WSHR) -o$@ $(MSYS)/tile2bin.c
|
||||
|
||||
$(HOST_O)til2bin2.o: $(HACK_H) $(TILE_H) $(MSYS)/pctiles.h $(MSYS)/pcvideo.h $(MSYS)/tile2bin.c
|
||||
$(HOST_CC) $(cflags) -I$(MSYS) -I$(WSHR) -DTILE_X=8 -DOVERVIEW_FILE -o$@ $(MSYS)/tile2bin.c
|
||||
|
||||
$(HOST_O)tiletext.o: $(CONFIG_H) $(TILE_H) $(WSHR)/tiletext.c
|
||||
$(HOST_CC) $(cflags) -I$(MSYS) -I$(WSHR) -o$@ $(WSHR)/tiletext.c
|
||||
|
||||
$(HOST_O)tiletex2.o: $(CONFIG_H) $(TILE_H) $(WSHR)/tiletext.c
|
||||
$(HOST_CC) $(cflags) -I$(MSYS) -I$(WSHR) -DTILE_X=8 -o$@ $(WSHR)/tiletext.c
|
||||
|
||||
$(HOST_O)tiletxt.o: $(CONFIG_H) $(TILE_H) $(WSHR)/tilemap.c
|
||||
$(HOST_CC) $(cflags) -I$(MSYS) -I$(WSHR) -DTILETEXT -o$@ $(WSHR)/tilemap.c
|
||||
|
||||
$(HOST_O)tiletxt2.o: $(CONFIG_H) $(TILE_H) $(WSHR)/tilemap.c
|
||||
$(HOST_CC) $(cflags) -I$(MSYS) -I$(WSHR) -DTILETEXT -DTILE_X=8 -o$@ $(WSHR)/tilemap.c
|
||||
#
|
||||
# Optional GIF Utilities (for development)
|
||||
#
|
||||
|
||||
$(U)gif2txt: $(GIFREADERS) $(TEXTIO)
|
||||
$(HOST_LINK) $(LFLAGS) -o$@ $(GIFREADERS) $(TEXTIO)
|
||||
|
||||
$(U)gif2txt2: $(GIFREAD2) $(TEXTIO2)
|
||||
$(HOST_LINK) $(LFLAGS) -o$@ $(GIFREAD2) $(TEXTIO2)
|
||||
|
||||
$(U)txt2ppm: $(PPMWRITERS) $(TEXTIO)
|
||||
$(HOST_LINK) $(LFLAGS) -o$@ $(PPMWRITERS) $(TEXTIO)
|
||||
|
||||
$(U)txt2ppm2: $(PPMWRIT2) $(TEXTIO2)
|
||||
$(HOST_LINK) $(LFLAGS) -o$@ $(PPMWRIT2) $(TEXTIO2)
|
||||
|
||||
$(HOST_O)gifread.o: $(CONFIG_H) $(WSHR)/tile.h $(WSHR)/gifread.c
|
||||
|
||||
$(HOST_O)gifread2.o: $(CONFIG_H) $(WSHR)/tile.h $(WSHR)/gifread.c
|
||||
$(HOST_CC) $(cflags) -DTILE_X=8 -o$@ $(WSHR)/gifread.c
|
||||
|
||||
ppmwrite.c: $(WSHR)/ppmwrite.c
|
||||
cp $(WSHR)/ppmwrite.c .
|
||||
|
||||
$(HOST_O)ppmwrite.o: $(CONFIG_H) $(WSHR)/tile.h
|
||||
|
||||
$(HOST_O)ppmwrit2.o: $(CONFIG_H) $(WSHR)/tile.h ppmwrite.c
|
||||
$(HOST_CC) $(cflags) -DTILE_X=8 -o$@ ppmwrite.c
|
||||
|
||||
#
|
||||
# Optional tile viewer (development sources only)
|
||||
#
|
||||
|
||||
$(U)viewtib: $(HOST_O)viewtib.o
|
||||
$(HOST_LINK) $(LFLAGS) -o$@ $(HOST_O)viewtib.o $(LIBRARIES)
|
||||
|
||||
$(HOST_O)viewtib.o: $(MSYS)/viewtib.c
|
||||
|
||||
endif
|
||||
|
||||
#==========================================
|
||||
# Other host Util Dependencies.
|
||||
#==========================================
|
||||
|
||||
$(HOST_O)monst.o: $(CONFIG_H) $(PERMONST_H) $(INCL)/monsym.h \
|
||||
$(INCL)/color.h monst.c
|
||||
$(HOST_CC) $(cflags) -o$@ monst.c
|
||||
|
||||
$(HOST_O)objects.o: $(CONFIG_H) $(INCL)/obj.h $(INCL)/objclass.h \
|
||||
$(INCL)/prop.h $(INCL)/color.h objects.c
|
||||
$(HOST_CC) $(cflags) -o$@ objects.c
|
||||
|
||||
$(HOST_O)panic.o: $(CONFIG_H) $(U)panic.c
|
||||
$(HOST_CC) $(cflags) -o$@ $(U)panic.c
|
||||
|
||||
#$(HOST_O)sp_lev.tag: $(HOST_O)utility.tag \
|
||||
# $(DAT)/bigroom.des $(DAT)/castle.des \
|
||||
# $(DAT)/endgame.des $(DAT)/gehennom.des $(DAT)/knox.des \
|
||||
# $(DAT)/medusa.des $(DAT)/oracle.des $(DAT)/tower.des \
|
||||
# $(DAT)/yendor.des $(DAT)/arch.des $(DAT)/barb.des \
|
||||
# $(DAT)/caveman.des $(DAT)/healer.des $(DAT)/knight.des \
|
||||
# $(DAT)/monk.des $(DAT)/priest.des $(DAT)/ranger.des \
|
||||
# $(DAT)/rogue.des $(DAT)/samurai.des $(DAT)/tourist.des \
|
||||
# $(DAT)/valkyrie.des $(DAT)/wizard.des
|
||||
# cd $(DAT)
|
||||
# $(U)lev_comp bigroom.des
|
||||
# $(U)lev_comp castle.des
|
||||
# $(U)lev_comp endgame.des
|
||||
# $(U)lev_comp gehennom.des
|
||||
# $(U)lev_comp knox.des
|
||||
# $(U)lev_comp mines.des
|
||||
# $(U)lev_comp medusa.des
|
||||
# $(U)lev_comp oracle.des
|
||||
# $(U)lev_comp sokoban.des
|
||||
# $(U)lev_comp tower.des
|
||||
# $(U)lev_comp yendor.des
|
||||
# $(U)lev_comp arch.des
|
||||
# $(U)lev_comp barb.des
|
||||
# $(U)lev_comp caveman.des
|
||||
# $(U)lev_comp healer.des
|
||||
# $(U)lev_comp knight.des
|
||||
# $(U)lev_comp monk.des
|
||||
# $(U)lev_comp priest.des
|
||||
# $(U)lev_comp ranger.des
|
||||
# $(U)lev_comp rogue.des
|
||||
# $(U)lev_comp samurai.des
|
||||
# $(U)lev_comp tourist.des
|
||||
# $(U)lev_comp valkyrie.des
|
||||
# $(U)lev_comp wizard.des
|
||||
# cd $(SRC)
|
||||
# echo sp_levs done > $@
|
||||
|
||||
#$(DAT)/dungeon: $(HOST_O)utility.tag $(DAT)/dungeon.def
|
||||
# $(U)makedefs -e
|
||||
# cd $(DAT)
|
||||
# $(U)dgn_comp dungeon.pdf
|
||||
# cd $(SRC)
|
||||
|
||||
#==========================================
|
||||
# Housekeeping for host side.
|
||||
#==========================================
|
||||
|
||||
clean:
|
||||
rm ./host_o/*.o
|
||||
if [ -f $(HOST_O)prereq.tag ]; then rm $(HOST_O)prereq.tag; fi;
|
||||
if [ -f hobj.tag ]; then rm hobj.tag; fi;
|
||||
if [ -f $(HOST_O)utility.tag ]; then rm $(HOST_O)utility.tag; fi;
|
||||
if [ -f temp.a ]; then rm temp.a; fi;
|
||||
|
||||
spotless: clean
|
||||
|
||||
if [ -f $(INCL)/pm.h ]; then rm $(INCL)/pm.h; fi;
|
||||
# if [ -f $(U)dgn_flex.c ]; then rm $(U)dgn_flex.c; fi;
|
||||
# if [ -f $(U)dgn_lex.c ]; then rm $(U)dgn_lex.c; fi;
|
||||
# if [ -f $(U)makedefs ]; then rm $(U)makedefs; fi;
|
||||
# if [ -f $(U)dgn_comp ]; then rm $(U)dgn_comp; fi;
|
||||
# if [ -f $(U)recover.exe ]; then rm $(U)recover.exe; fi;
|
||||
# if [ -f $(U)tilemap ]; then rm $(U)tilemap; fi;
|
||||
# if [ -f $(U)tile2bmp ]; then rm $(U)tile2bmp; fi;
|
||||
# if [ -f $(U)tile2bin ]; then rm $(U)tile2bin; fi;
|
||||
# if [ -f $(U)til2bin2 ]; then rm $(U)til2bin2; fi;
|
||||
# if [ -f $(U)thintile ]; then rm $(U)thintile; fi;
|
||||
# if [ -f $(U)dlb_main ]; then rm $(U)dlb_main; fi;
|
||||
# if [ -f $(INCL)/vis_tab.h ]; then rm $(INCL)/vis_tab.h; fi;
|
||||
# if [ -f $(INCL)/onames.h ]; then rm $(INCL)/onames.h; fi;
|
||||
# if [ -f $(INCL)/pm.h ]; then rm $(INCL)/pm.h; fi;
|
||||
# if [ -f $(INCL)/date.h ]; then rm $(INCL)/date.h; fi;
|
||||
# if [ -f $(INCL)/dgn_comp.h ]; then rm $(INCL)/dgn_comp.h; fi;
|
||||
# if [ -f $(INCL)/lev_comp.h ]; then rm $(INCL)/lev_comp.h; fi;
|
||||
# if [ -f $(SRC)/vis_tab.c ]; then rm $(SRC)/vis_tab.c; fi;
|
||||
# if [ -f $(SRC)/tile.c ]; then rm $(SRC)/tile.c; fi;
|
||||
# if [ -f $(DAT)/options ]; then rm $(DAT)/options; fi;
|
||||
# if [ -f $(DAT)/data ]; then rm $(DAT)/data; fi;
|
||||
# if [ -f $(DAT)/rumors ]; then rm $(DAT)/rumors; fi;
|
||||
# if [ -f $(DAT)/dungeon.pdf ]; then rm $(DAT)/dungeon.pdf; fi;
|
||||
# if [ -f $(DAT)/dungeon ]; then rm $(DAT)/dungeon; fi;
|
||||
# if [ -f $(DAT)/oracles ]; then rm $(DAT)/oracles; fi;
|
||||
# if [ -f $(DAT)/quest.dat ]; then rm $(DAT)/quest.dat; fi;
|
||||
# if [ -f $(DAT)/bogusmon ]; then rm $(DAT)/bogusmon; fi;
|
||||
# if [ -f $(DAT)/engrave ]; then rm $(DAT)/engrave; fi;
|
||||
# if [ -f $(DAT)/epitaph ]; then rm $(DAT)/epitaph; fi;
|
||||
# if [ -f $(DAT)/dlb.lst ]; then rm $(DAT)/dlb.lst; fi;
|
||||
# if [ -f $(DAT)/nhdat ]; then rm $(DAT)/nhdat; fi;
|
||||
# if [ -f $(DAT)/*.lev ]; then rm $(DAT)/*.lev; fi;
|
||||
# if [ -f $(TILE_BMP) ]; then rm $(TILE_BMP); fi;
|
||||
# if [ -f $(WSHR)/monthin.txt ]; then rm $(WSHR)/monthin.txt; fi;
|
||||
# if [ -f $(WSHR)/objthin.txt ]; then rm $(WSHR)/objthin.txt; fi;
|
||||
# if [ -f $(WSHR)/oththin.txt ]; then rm $(WSHR)/oththin.txt; fi;
|
||||
|
||||
#==========================================
|
||||
# Game Dependencies
|
||||
#==========================================
|
||||
|
||||
# src dependencies
|
||||
|
||||
$(HOST_O)tile.o: tile.c $(HACK_H)
|
||||
$(HOST_O)vis_tab.o: vis_tab.c $(CONFIG_H) $(INCL)/vis_tab.h
|
||||
$(HOST_O)alloc.o: alloc.c $(CONFIG_H)
|
||||
$(HOST_O)dlb.o: dlb.c $(CONFIG_H) $(INCL)/dlb.h
|
||||
$(HOST_CC) $(cflags) -I../sys/msdos -o$@ dlb.c
|
||||
$(HOST_O)monst.o: monst.c $(CONFIG_H) $(INCL)/permonst.h $(INCL)/align.h \
|
||||
$(INCL)/monattk.h $(INCL)/monflag.h $(INCL)/monsym.h \
|
||||
$(INCL)/color.h
|
||||
$(HOST_O)objects.o: objects.c $(CONFIG_H) $(INCL)/obj.h $(INCL)/objclass.h \
|
||||
$(INCL)/prop.h $(INCL)/skills.h $(INCL)/color.h
|
||||
$(HOST_O)tileset.o: $(WSHR)/tileset.c $(HACK_H)
|
||||
$(HOST_O)bmptiles.o: $(WSHR)/bmptiles.c $(INCL)/config.h $(INCL)/tileset.h $(INCL)/integer.h
|
||||
$(HOST_O)giftiles.o: $(WSHR)/giftiles.c $(INCL)/config.h $(INCL)/tileset.h $(INCL)/integer.h
|
||||
|
||||
# end of file
|
||||
|
||||
1263
sys/msdos/Makefile2.cross
Normal file
1263
sys/msdos/Makefile2.cross
Normal file
File diff suppressed because it is too large
Load Diff
@@ -15,13 +15,11 @@
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
#if !defined(AMIGA) && !defined(GNUDOS)
|
||||
#if !defined(AMIGA) && !defined(__DJGPP__)
|
||||
#include <sys\stat.h>
|
||||
#else
|
||||
#ifdef GNUDOS
|
||||
#include <sys/stat.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __DJGPP__
|
||||
#include <unistd.h> /* for getcwd() prototype */
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
static void FDECL(process_options, (int argc, char **argv));
|
||||
static void NDECL(nhusage);
|
||||
static char *NDECL(get_executable_path);
|
||||
char *FDECL(translate_path_variables, (char *, char *));
|
||||
char *FDECL(translate_path_variables, (const char *, char *));
|
||||
char *NDECL(exename);
|
||||
boolean NDECL(fakeconsole);
|
||||
void NDECL(freefakeconsole);
|
||||
|
||||
@@ -759,11 +759,10 @@ curses_display_nhmenu(winid wid, int how, MENU_ITEM_P ** _selected)
|
||||
menu_determine_pages(current_menu);
|
||||
|
||||
/* Display pre and post-game menus centered */
|
||||
if (((g.moves <= 1) && !g.invent) || g.program_state.gameover) {
|
||||
if ((g.moves <= 1 && !g.invent) || g.program_state.gameover) {
|
||||
win = curses_create_window(current_menu->width,
|
||||
current_menu->height, CENTER);
|
||||
} else { /* Display during-game menus on the right out of the way */
|
||||
|
||||
win = curses_create_window(current_menu->width,
|
||||
current_menu->height, RIGHT);
|
||||
}
|
||||
@@ -1000,13 +999,13 @@ static void
|
||||
menu_win_size(nhmenu *menu)
|
||||
{
|
||||
int maxwidth, maxheight, curentrywidth, lastline;
|
||||
int maxentrywidth = (int) strlen(menu->prompt);
|
||||
int maxheaderwidth = 0;
|
||||
int maxentrywidth = 0;
|
||||
int maxheaderwidth = menu->prompt ? (int) strlen(menu->prompt) : 0;
|
||||
nhmenu_item *menu_item_ptr;
|
||||
|
||||
if (g.program_state.gameover) {
|
||||
/* for final inventory disclosure, use full width */
|
||||
maxwidth = term_cols - 2;
|
||||
maxwidth = term_cols - 2; /* +2: borders assumed */
|
||||
} else {
|
||||
/* this used to be 38, which is 80/2 - 2 (half a 'normal' sized
|
||||
screen minus room for a border box), but some data files
|
||||
@@ -1029,7 +1028,7 @@ menu_win_size(nhmenu *menu)
|
||||
maxheaderwidth = curentrywidth;
|
||||
}
|
||||
} else {
|
||||
/* Add space for accelerator */
|
||||
/* Add space for accelerator (selector letter) */
|
||||
curentrywidth += 4;
|
||||
#if 0 /* FIXME: menu glyphs */
|
||||
if (menu_item_ptr->glyph != NO_GLYPH && iflags.use_menu_glyphs)
|
||||
@@ -1041,20 +1040,20 @@ menu_win_size(nhmenu *menu)
|
||||
}
|
||||
}
|
||||
|
||||
/* If widest entry is smaller than maxwidth, reduce maxwidth
|
||||
accordingly (but not too far; minimum width will be applied below) */
|
||||
if (maxentrywidth < maxwidth) {
|
||||
maxwidth = maxentrywidth;
|
||||
}
|
||||
|
||||
/* Try not to wrap headers/normal text lines if possible. We can
|
||||
go wider than half the screen for this purpose if need be */
|
||||
|
||||
if (maxheaderwidth > maxwidth) {
|
||||
if (maxheaderwidth < (term_cols - 2))
|
||||
maxwidth = maxheaderwidth;
|
||||
else
|
||||
maxwidth = term_cols - 2;
|
||||
/*
|
||||
* 3.6.3: This used to set maxwidth to maxheaderwidth when that was
|
||||
* bigger but only set it to maxentrywidth if the latter was smaller,
|
||||
* so entries wider than the default would always wrap unless at
|
||||
* least one header or separator line was long, even when there was
|
||||
* lots of space available to display them without wrapping. The
|
||||
* reason to force narrow menus isn't known. It may have been to
|
||||
* reduce the amount of map rewriting when menu is dismissed, but if
|
||||
* so, that was an issue due to excessive screen writing for the map
|
||||
* (output was flushed for each character) which was fixed long ago.
|
||||
*/
|
||||
maxwidth = max(maxentrywidth, maxheaderwidth);
|
||||
if (maxwidth > term_cols - 2) { /* -2: space for left and right borders */
|
||||
maxwidth = term_cols - 2;
|
||||
}
|
||||
|
||||
/* Possibly reduce height if only 1 page */
|
||||
|
||||
@@ -24,6 +24,15 @@ extern char erase_char, kill_char;
|
||||
|
||||
extern long curs_mesg_suppress_turn; /* from cursmesg.c */
|
||||
|
||||
/* stubs for curses_procs{} */
|
||||
#ifdef POSITIONBAR
|
||||
static void dummy_update_position_bar(char *);
|
||||
#endif
|
||||
#ifdef CHANGE_COLOR
|
||||
static void dummy_change_color(int, long, int);
|
||||
static char *dummy_get_color_string(VOID_ARGS);
|
||||
#endif
|
||||
|
||||
/* Public functions for curses NetHack interface */
|
||||
|
||||
/* Interface definition, for windows.c */
|
||||
@@ -69,7 +78,7 @@ struct window_procs curses_procs = {
|
||||
curses_cliparound,
|
||||
#endif
|
||||
#ifdef POSITIONBAR
|
||||
donull,
|
||||
dummy_update_position_bar,
|
||||
#endif
|
||||
curses_print_glyph,
|
||||
curses_raw_print,
|
||||
@@ -83,9 +92,13 @@ struct window_procs curses_procs = {
|
||||
curses_get_ext_cmd,
|
||||
curses_number_pad,
|
||||
curses_delay_output,
|
||||
#ifdef CHANGE_COLOR /* only a Mac option currently */
|
||||
donull,
|
||||
donull,
|
||||
#ifdef CHANGE_COLOR
|
||||
dummy_change_color,
|
||||
#ifdef MAC /* old OS 9, not OSX */
|
||||
(void (*)(int)) 0,
|
||||
(short (*)(winid, char *)) 0,
|
||||
#endif
|
||||
dummy_get_color_string,
|
||||
#endif
|
||||
curses_start_screen,
|
||||
curses_end_screen,
|
||||
@@ -945,4 +958,28 @@ curs_reset_windows(boolean redo_main, boolean redo_status)
|
||||
}
|
||||
}
|
||||
|
||||
/* stubs for curses_procs{} */
|
||||
|
||||
#ifdef POSITIONBAR
|
||||
static void
|
||||
dummy_update_position_bar(char *arg UNUSED)
|
||||
{
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CHANGE_COLOR
|
||||
static void
|
||||
dummy_change_color(int a1 UNUSED, long a2 UNUSED, int a3 UNUSED)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
static char *
|
||||
dummy_get_color_string(VOID_ARGS)
|
||||
{
|
||||
return (char *) 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*cursmain.c*/
|
||||
|
||||
Reference in New Issue
Block a user