Guidebook update and SEDUCE runtime switch
add SYSCF docs to the Guidebook because it's info needed in a binary distro Guidebook.tex - also add some missing italics to some "NetHack" occurances call nethack.org "official" Guidebook.txt - didn't regenerate cleanly so no diff add SEDUCE to SYSCF (only partly inspired by the recent email)
This commit is contained in:
@@ -2092,6 +2092,15 @@ int src;
|
||||
if(sysopt.recover) free(sysopt.recover);
|
||||
sysopt.recover = (char*)alloc(strlen(bufp)+1);
|
||||
Strcpy(sysopt.recover, bufp);
|
||||
} else if ( match_varname(buf, "SEDUCE", 6)) {
|
||||
int temp = !!atoi(bufp); /* XXX this could be tighter */
|
||||
/* allow anyone to turn it off, but only sysconf to turn it on*/
|
||||
if(src!=SET_IN_SYS && temp!=0){
|
||||
raw_printf("Illegal value in SEDUCE");
|
||||
return 0;
|
||||
}
|
||||
sysopt.seduce = temp;
|
||||
sysopt_seduce_set(temp);
|
||||
} else if ( (src==SET_IN_SYS) && match_varname(buf, "MAXPLAYERS", 10)) {
|
||||
int temp = atoi(bufp);
|
||||
/* XXX to get more than 25, need to rewrite all lock code */
|
||||
|
||||
26
src/mhitu.c
26
src/mhitu.c
@@ -1251,6 +1251,17 @@ dopois:
|
||||
if(!mtmp->mcan) stealgold(mtmp);
|
||||
break;
|
||||
|
||||
#ifdef SEDUCE
|
||||
case AD_SSEX:
|
||||
if(SYSOPT_SEDUCE){
|
||||
if(could_seduce(mtmp, &youmonst, mattk) == 1
|
||||
&& !mtmp->mcan)
|
||||
if (doseduce(mtmp))
|
||||
return 3;
|
||||
break;
|
||||
}
|
||||
/* else FALLTHRU */
|
||||
#endif
|
||||
case AD_SITM: /* for now these are the same */
|
||||
case AD_SEDU:
|
||||
if (is_animal(mtmp->data)) {
|
||||
@@ -1259,7 +1270,7 @@ dopois:
|
||||
/* Continue below */
|
||||
} else if (dmgtype(youmonst.data, AD_SEDU)
|
||||
#ifdef SEDUCE
|
||||
|| dmgtype(youmonst.data, AD_SSEX)
|
||||
|| (SYSOPT_SEDUCE && dmgtype(youmonst.data, AD_SSEX))
|
||||
#endif
|
||||
) {
|
||||
pline("%s %s.", Monnam(mtmp), mtmp->minvent ?
|
||||
@@ -1300,14 +1311,7 @@ dopois:
|
||||
return 3;
|
||||
}
|
||||
break;
|
||||
#ifdef SEDUCE
|
||||
case AD_SSEX:
|
||||
if(could_seduce(mtmp, &youmonst, mattk) == 1
|
||||
&& !mtmp->mcan)
|
||||
if (doseduce(mtmp))
|
||||
return 3;
|
||||
break;
|
||||
#endif
|
||||
|
||||
case AD_SAMU:
|
||||
hitmsg(mtmp, mattk);
|
||||
/* when the Wiz hits, 1/20 steals the amulet */
|
||||
@@ -2196,7 +2200,7 @@ struct attack *mattk;
|
||||
|
||||
if(agrinvis && !defperc
|
||||
#ifdef SEDUCE
|
||||
&& mattk && mattk->adtyp != AD_SSEX
|
||||
&& (!SYSOPT_SEDUCE || ( mattk && mattk->adtyp != AD_SSEX))
|
||||
#endif
|
||||
)
|
||||
return 0;
|
||||
@@ -2204,7 +2208,7 @@ struct attack *mattk;
|
||||
if(pagr->mlet != S_NYMPH
|
||||
&& ((pagr != &mons[PM_INCUBUS] && pagr != &mons[PM_SUCCUBUS])
|
||||
#ifdef SEDUCE
|
||||
|| (mattk && mattk->adtyp != AD_SSEX)
|
||||
|| (SYSOPT_SEDUCE && mattk && mattk->adtyp != AD_SSEX)
|
||||
#endif
|
||||
))
|
||||
return 0;
|
||||
|
||||
14
src/monst.c
14
src/monst.c
@@ -2548,14 +2548,16 @@ struct permonst _mons2[] = {
|
||||
M3_INFRAVISIBLE|M3_INFRAVISION, CLR_BLUE),
|
||||
/* standard demons & devils
|
||||
*/
|
||||
#ifdef SEDUCE
|
||||
# define SEDUCTION_ATTACKS \
|
||||
#define SEDUCTION_ATTACKS_YES \
|
||||
A(ATTK(AT_BITE, AD_SSEX, 0, 0), ATTK(AT_CLAW, AD_PHYS, 1, 3), \
|
||||
ATTK(AT_CLAW, AD_PHYS, 1, 3), NO_ATTK, NO_ATTK, NO_ATTK)
|
||||
#else
|
||||
# define SEDUCTION_ATTACKS \
|
||||
#define SEDUCTION_ATTACKS_NO \
|
||||
A(ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_CLAW, AD_PHYS, 1, 3), \
|
||||
ATTK(AT_BITE, AD_DRLI, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK)
|
||||
#ifdef SEDUCE
|
||||
# define SEDUCTION_ATTACKS SEDUCTION_ATTACKS_YES
|
||||
#else
|
||||
# define SEDUCTION_ATTACKS SEDUCTION_ATTACKS_NO
|
||||
#endif
|
||||
MON("succubus", S_DEMON,
|
||||
LVL(6, 12, 0, 70, -9), (G_NOCORPSE|1),
|
||||
@@ -3479,6 +3481,10 @@ monst_init()
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
struct attack sa_yes[NATTK] = SEDUCTION_ATTACKS_YES;
|
||||
struct attack sa_no[NATTK] = SEDUCTION_ATTACKS_NO;
|
||||
|
||||
#endif
|
||||
|
||||
/*monst.c*/
|
||||
|
||||
16
src/sounds.c
16
src/sounds.c
@@ -779,17 +779,20 @@ register struct monst *mtmp;
|
||||
}
|
||||
break;
|
||||
case MS_SEDUCE:
|
||||
{
|
||||
int swval;
|
||||
#ifdef SEDUCE
|
||||
if (ptr->mlet != S_NYMPH &&
|
||||
if (SYSOPT_SEDUCE) {
|
||||
if (ptr->mlet != S_NYMPH &&
|
||||
could_seduce(mtmp, &youmonst, (struct attack *)0) == 1) {
|
||||
(void) doseduce(mtmp);
|
||||
break;
|
||||
}
|
||||
switch ((poly_gender() != (int) mtmp->female) ? rn2(3) : 0)
|
||||
#else
|
||||
switch ((poly_gender() == 0) ? rn2(3) : 0)
|
||||
}
|
||||
swval = ((poly_gender() != (int) mtmp->female) ? rn2(3) : 0);
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
swval = ((poly_gender() == 0) ? rn2(3) : 0);
|
||||
switch(swval){
|
||||
case 2:
|
||||
verbl_msg = "Hello, sailor.";
|
||||
break;
|
||||
@@ -799,6 +802,7 @@ register struct monst *mtmp;
|
||||
default:
|
||||
pline_msg = "cajoles you.";
|
||||
}
|
||||
}
|
||||
break;
|
||||
#ifdef KOPS
|
||||
case MS_ARREST:
|
||||
|
||||
20
src/sys.c
20
src/sys.c
@@ -47,5 +47,25 @@ sys_early_init(){
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef SEDUCE
|
||||
sysopt.seduce = 1; /* if it's compiled in, default to on */
|
||||
sysopt_seduce_set(sysopt.seduce);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
extern struct attack sa_yes[NATTK];
|
||||
extern struct attack sa_no[NATTK];
|
||||
|
||||
void
|
||||
sysopt_seduce_set(val)
|
||||
int val;
|
||||
{
|
||||
struct attack *setval = val ? sa_yes : sa_no;
|
||||
int x;
|
||||
for(x=0; x<NATTK; x++){
|
||||
mons[PM_INCUBUS].mattk[x] = setval[x];
|
||||
mons[PM_SUCCUBUS].mattk[x] = setval[x];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2075,7 +2075,8 @@ use_weapon:
|
||||
/* succubi/incubi are humanoid, but their _second_
|
||||
* attack is AT_CLAW, not their first...
|
||||
*/
|
||||
if (i==1 && uwep && (u.umonnum == PM_SUCCUBUS ||
|
||||
if (SYSOPT_SEDUCE && i==1 && uwep &&
|
||||
(u.umonnum == PM_SUCCUBUS ||
|
||||
u.umonnum == PM_INCUBUS)) goto use_weapon;
|
||||
#endif
|
||||
case AT_KICK:
|
||||
|
||||
Reference in New Issue
Block a user