Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

NetHack 2.3 Update Pt. 07 of 12

6 views
Skip to first unread message

Mike Stephenson

unread,
Apr 13, 1988, 7:54:52 AM4/13/88
to

Two more today...

-------------------------------cut here---------------------------------------
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
# Update.2.3.c
# This archive created: Mon Apr 4 08:52:32 1988
export PATH; PATH=/bin:$PATH
echo shar: extracting "'Update.2.3.c'" '(31961 characters)'
if test -f 'Update.2.3.c'
then
echo shar: will not over-write existing file "'Update.2.3.c'"
else
cat << \SHAR_EOF > 'Update.2.3.c'
*** ./makemon.c.orig Mon Feb 22 08:40:06 1988
--- ./makemon.c Thu Mar 31 09:08:52 1988
***************
*** 1,4
! /* SCCS Id: @(#)makemon.c 2.2 87/11/29
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */

#include "hack.h"

--- 1,4 -----
! /* SCCS Id: @(#)makemon.c 2.3 87/12/12
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */

#include "hack.h"
***************
*** 22,27
# endif
#endif /* KJSMODS /**/

/*
* called with [x,y] = coordinates;
* [0,0] means anyplace

--- 22,37 -----
# endif
#endif /* KJSMODS /**/

+ struct permonst grey_dragon = { "grey dragon", 'D',10,9,-1,20,3,8,0 };
+ struct permonst red_dragon = { "red dragon", 'D',10,9,-1,20,3,8,0 };
+ struct permonst orange_dragon = { "orange dragon",'D',10,9,-1,20,3,8,0 };
+ struct permonst white_dragon = { "white dragon", 'D',10,9,-1,20,3,8,0 };
+ struct permonst black_dragon = { "black dragon", 'D',10,9,-1,20,3,8,0 };
+ struct permonst blue_dragon = { "blue dragon", 'D',10,9,-1,20,3,8,0 };
+ struct permonst green_dragon = { "green dragon", 'D',10,9,-1,20,3,8,0 };
+ struct permonst yellow_dragon = { "yellow dragon",'D',10,9,-1,20,3,8,0 };
+ extern struct permonst pm_gremlin;
+
/*
* called with [x,y] = coordinates;
* [0,0] means anyplace
***************
*** 40,46
boolean anything = (!ptr);
int zlevel = dlevel;
#ifdef BVH
! if(has_amulet()) zlevel = 40;
#endif
/* if a monster already exists at the position, return */
if(x != 0 || y != 0) if(m_at(x,y)) return((struct monst *) 0);

--- 50,56 -----
boolean anything = (!ptr);
int zlevel = dlevel;
#ifdef BVH
! if(has_amulet()) zlevel = MAXLEVEL;
#endif
/* if a monster already exists at the position, return */
if(x != 0 || y != 0) if(m_at(x,y)) return((struct monst *) 0);
***************
*** 112,117
mtmp->mx = x;
mtmp->my = y;
mtmp->mcansee = 1;
if(ptr->mlet == 'M'){
mtmp->mimic = 1;
mtmp->mappearance = ']';

--- 122,147 -----
mtmp->mx = x;
mtmp->my = y;
mtmp->mcansee = 1;
+ if(ptr->mlet == 'D') {
+ mtmp->dragon = rn2(8);
+ switch(mtmp->dragon) {
+ case 0: mtmp->data = &grey_dragon; break;
+ case 1: mtmp->data = &red_dragon; break;
+ case 2: mtmp->data = &orange_dragon; break;
+ case 3: mtmp->data = &white_dragon; break;
+ case 4: mtmp->data = &black_dragon; break;
+ case 5: mtmp->data = &blue_dragon; break;
+ case 6: mtmp->data = &green_dragon; break;
+ case 7: mtmp->data = &yellow_dragon; break;
+ }
+ }
+ /* if gnome, make a gremlin or if gremlin make sure it stays gremlin */
+ if((ptr->mlet == 'G' && zlevel >= 10 && rn2(4)) ||
+ !strcmp(ptr->mname, "gremlin")) {
+ ptr = PM_GREMLIN;
+ mtmp->data = PM_GREMLIN;
+ mtmp->isgremlin = 1;
+ }
if(ptr->mlet == 'M'){
mtmp->mimic = 1;
mtmp->mappearance = ']';
***************
*** 138,143
else {
mtmp->cham = 1;
(void) newcham(mtmp,
&mons[zlevel+14+rn2(CMNUM-14-zlevel)]);
}
#else

--- 168,174 -----
else {
mtmp->cham = 1;
(void) newcham(mtmp,
+ # ifndef RPH
&mons[zlevel+14+rn2(CMNUM-14-zlevel)]);
# else
(struct permonst *)0);
***************
*** 139,144
mtmp->cham = 1;
(void) newcham(mtmp,
&mons[zlevel+14+rn2(CMNUM-14-zlevel)]);
}
#else
mtmp->cham = 1;

--- 170,178 -----
(void) newcham(mtmp,
# ifndef RPH
&mons[zlevel+14+rn2(CMNUM-14-zlevel)]);
+ # else
+ (struct permonst *)0);
+ # endif
}
#else
mtmp->cham = 1;
***************
*** 142,148
}
#else
mtmp->cham = 1;
! (void) newcham(mtmp, &mons[zlevel+14+rn2(CMNUM-14-zlevel)]);
#endif
}
if(ptr->mlet == 'I' || ptr->mlet == ';')

--- 176,187 -----
}
#else
mtmp->cham = 1;
! (void) newcham (mtmp,
! # ifndef RPH
! &mons[zlevel+14+rn2(CMNUM-14-zlevel)]);
! # else
! 0);
! # endif
#endif
}
if(ptr->mlet == 'I' || ptr->mlet == ';')
***************
*** 177,182
#ifdef SAC
|| ptr->mlet == '3'
#endif /* SAC /**/
) {

coord mm;

--- 216,222 -----
#ifdef SAC
|| ptr->mlet == '3'
#endif /* SAC /**/
+ || (ptr->mlet == 'G' && mtmp->isgremlin)
) {

coord mm;
***************
*** 211,217
# endif
# ifdef SAC
case '3': /* Outfit the troops */
! if (!rn2(4)) {
otmp = mksobj(HELMET);
mpickobj(mtmp, otmp); }
if (!rn2(4)) {

--- 251,257 -----
# endif
# ifdef SAC
case '3': /* Outfit the troops */
! if (!rn2(5)) {
otmp = mksobj(HELMET);
mpickobj(mtmp, otmp); }
if (!rn2(5)) {
***************
*** 214,220
if (!rn2(4)) {
otmp = mksobj(HELMET);
mpickobj(mtmp, otmp); }
! if (!rn2(4)) {
otmp = mksobj(CHAIN_MAIL);
mpickobj(mtmp, otmp); }
if (!rn2(3)) {

--- 254,260 -----
if (!rn2(5)) {
otmp = mksobj(HELMET);
mpickobj(mtmp, otmp); }
! if (!rn2(5)) {
otmp = mksobj(CHAIN_MAIL);
mpickobj(mtmp, otmp); }
if (!rn2(4)) {
***************
*** 217,223
if (!rn2(4)) {
otmp = mksobj(CHAIN_MAIL);
mpickobj(mtmp, otmp); }
! if (!rn2(3)) {
otmp = mksobj(DAGGER);
mpickobj(mtmp, otmp); }
if (!rn2(6)) {

--- 257,263 -----
if (!rn2(5)) {
otmp = mksobj(CHAIN_MAIL);
mpickobj(mtmp, otmp); }
! if (!rn2(4)) {
otmp = mksobj(DAGGER);
mpickobj(mtmp, otmp); }
if (!rn2(7)) {
***************
*** 220,226
if (!rn2(3)) {
otmp = mksobj(DAGGER);
mpickobj(mtmp, otmp); }
! if (!rn2(6)) {
otmp = mksobj(SPEAR);
mpickobj(mtmp, otmp); }
if (!rn2(2)) {

--- 260,266 -----
if (!rn2(4)) {
otmp = mksobj(DAGGER);
mpickobj(mtmp, otmp); }
! if (!rn2(7)) {
otmp = mksobj(SPEAR);
mpickobj(mtmp, otmp); }
if (!rn2(3)) {
***************
*** 223,228
if (!rn2(6)) {
otmp = mksobj(SPEAR);
mpickobj(mtmp, otmp); }
if (!rn2(2)) {
otmp = mksobj(TIN);
mpickobj(mtmp, otmp); }

--- 263,271 -----
if (!rn2(7)) {
otmp = mksobj(SPEAR);
mpickobj(mtmp, otmp); }
+ if (!rn2(3)) {
+ otmp = mksobj(K_RATION);
+ mpickobj(mtmp, otmp); }
if (!rn2(2)) {
otmp = mksobj(C_RATION);
mpickobj(mtmp, otmp); }
***************
*** 224,230
otmp = mksobj(SPEAR);
mpickobj(mtmp, otmp); }
if (!rn2(2)) {
! otmp = mksobj(TIN);
mpickobj(mtmp, otmp); }
# endif /* SAC /**/
# ifdef KOPS

--- 267,273 -----
otmp = mksobj(K_RATION);
mpickobj(mtmp, otmp); }
if (!rn2(2)) {
! otmp = mksobj(C_RATION);
mpickobj(mtmp, otmp); }
# endif /* SAC /**/
# ifdef KOPS
*** ./mhitu.c.orig Mon Feb 22 08:40:06 1988
--- ./mhitu.c Thu Mar 31 09:08:57 1988
***************
*** 1,4
! /* SCCS Id: @(#)mhitu.c 2.1 87/10/18
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */

#include "hack.h"

--- 1,4 -----
! /* SCCS Id: @(#)mhitu.c 2.3 88/01/21
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */

#include "hack.h"
***************
*** 8,13
extern char pl_character[];
#endif

/*
* mhitu: monster hits you
* returns 1 if monster dies (e.g. 'y', 'F'), 0 otherwise

--- 8,22 -----
extern char pl_character[];
#endif

+ char *breathe[]= { "fragments",
+ "fire",
+ "sleep gas",
+ "frost",
+ "death",
+ "lightening",
+ "poison gas",
+ "acid" };
+
/*
* mhitu: monster hits you
* returns 1 if monster dies (e.g. 'y', 'F'), 0 otherwise
***************
*** 86,92
tmp += hitu(mtmp,d(mdat->damn,mdat->damd));

ctmp = tmp && !mtmp->mcan &&
! (!uarm || objects[uarm->otyp].a_can < rnd(3) || !rn2(50));
switch(mdat->mlet) {
case '1':
if(wiz_hit(mtmp)) return(1); /* he disappeared */

--- 95,101 -----
tmp += hitu(mtmp,d(mdat->damn,mdat->damd));

ctmp = tmp && !mtmp->mcan &&
! (!uarm || objects[uarm->otyp].a_can < rnz(3));
switch(mdat->mlet) {
case '1':
if(wiz_hit(mtmp)) return(1); /* he disappeared */
***************
*** 92,98
if(wiz_hit(mtmp)) return(1); /* he disappeared */
break;
case '&':
! demon_hit(mtmp);
break;
case ',':
if(tmp) justswld(mtmp,Monnam(mtmp));

--- 101,110 -----
if(wiz_hit(mtmp)) return(1); /* he disappeared */
break;
case '&':
! if(mtmp->isdjinni) {
! (void) hitu(mtmp,d(mdat->damn, mdat->damd));
! (void) hitu(mtmp,d(mdat->damn, mdat->damd));
! } else demon_hit(mtmp);
break;
case ',':
if(tmp) justswld(mtmp,Monnam(mtmp));
***************
*** 102,107
break;
case ';':
if(ctmp) {
if(!u.ustuck && !rn2(10)) {
pline("%s swings itself around you!",
Monnam(mtmp));

--- 114,127 -----
break;
case ';':
if(ctmp) {
+ if (!rn2(6)) {
+ if (!Blind)
+ pline("%s shocks you!", Monnam(mtmp));
+ else pline("It shocks you!");
+ if (Shock_resistance)
+ pline("You aren't affected!");
+ else losehp_m(d(4,6),mtmp);
+ } else
if(!u.ustuck && !rn2(10)) {
pline("%s swings itself around you!",
Monnam(mtmp));
***************
*** 148,155
(void) hitu(mtmp,rnd(8));
break;
}
! kludge("%s breathes fire!",Monnam(mtmp));
! buzz(-1,mtmp->mx,mtmp->my,u.ux-mtmp->mx,u.uy-mtmp->my);
break;
case 'd':
(void) hitu(mtmp,d(2, (flags.moonphase == FULL_MOON) ? 3 : 4));

--- 168,176 -----
(void) hitu(mtmp,rnd(8));
break;
}
! kludge("%s breathes %s!",Monnam(mtmp), breathe[mtmp->dragon]);
! buzz((int) -10 - (mtmp->dragon),
! mtmp->mx,mtmp->my,u.ux-mtmp->mx,u.uy-mtmp->my);
break;
case 'd':
(void) hitu(mtmp,d(2, (flags.moonphase == FULL_MOON) ? 3 : 4));
***************
*** 174,179
}
mondead(mtmp);
return(1);
case 'g':
if(ctmp && multi >= 0 && !rn2(3)) {
/* fix so we don't know what hit us when blind KAA */

--- 195,210 -----
}
mondead(mtmp);
return(1);
+ case 'G':
+ if(!mtmp->isgremlin || mtmp->mcan) break;
+ if(!rn2(10)) {
+ if (Blind)
+ pline("You hear laughter.");
+ else
+ pline("%s chuckles.", Monnam(mtmp));
+ attrcurse();
+ }
+ break;
case 'g':
if(ctmp && multi >= 0 && !rn2(3)) {
/* fix so we do not know what hit us when blind KAA */
***************
*** 176,182
return(1);
case 'g':
if(ctmp && multi >= 0 && !rn2(3)) {
! /* fix so we don't know what hit us when blind KAA */
if (Blind)
pline("You are frozen by its juices!");
else

--- 207,213 -----
break;
case 'g':
if(ctmp && multi >= 0 && !rn2(3)) {
! /* fix so we do not know what hit us when blind KAA */
if (Blind)
pline("You are frozen by its juices!");
else
***************
*** 238,243
#ifdef KAA
&& u.usym == '@'
#endif
&& !uarm && !uarmh && !uarms && !uarmg) {
pline("%s hits! (I hope you don't mind)",
Monnam(mtmp));

--- 269,277 -----
#ifdef KAA
&& u.usym == '@'
#endif
+ #ifdef SHIRT
+ && !uarmu
+ #endif
&& !uarm && !uarmh && !uarms && !uarmg) {
pline("%s hits! (I hope you don't mind)",
Monnam(mtmp));
***************
*** 393,398
(void) hitu(mtmp,d(2,6));
break;
#endif
}
if(u.uhp < 1) done_in_by(mtmp);
return(0);

--- 427,444 -----
(void) hitu(mtmp,d(2,6));
break;
#endif
+ #ifdef STOOGES
+ case '@':
+ if(!mtmp->isstooge) break;
+ if(!tmp) break;
+ if(!rn2(6) && !Blind) {
+ pline ("%s poked you in the eye.", Monnam(mtmp));
+ pline ("You are blinded!");
+ Blinded += rnd(10);
+ seeoff(0);
+ }
+ break;
+ #endif
}
if(u.uhp < 1) done_in_by(mtmp);
return(0);
***************
*** 413,419
mtmp->mundetected = 0;
if(!Blind) {
register struct obj *obj;
! extern char * Xmonnam();
if(obj = o_at(mtmp->mx,mtmp->my))
pline("%s was hidden under %s!",
Xmonnam(mtmp), doname(obj));

--- 459,465 -----
mtmp->mundetected = 0;
if(!Blind) {
register struct obj *obj;
! extern char *Xmonnam();
if(obj = o_at(mtmp->mx,mtmp->my))
pline("%s was hidden under %s!",
Xmonnam(mtmp), doname(obj));
***************
*** 468,474

if(uwep && !strcmp(ONAME(uwep), "Excalibur")) {

! pline("%s looks very angry.", Xmonnam(mtmp, 1));
mtmp->mpeaceful = mtmp->mtame = 0;
return(0);
}

--- 514,520 -----

if(uwep && !strcmp(ONAME(uwep), "Excalibur")) {

! pline("%s looks very angry.", Xmonnam(mtmp));
mtmp->mpeaceful = mtmp->mtame = 0;
return(0);
}
***************
*** 475,481
if(!strcmp(mtmp->data->mname, "demon")) { /* not for regular '&'s */

pline("%s mutters something about awful working conditions.",
! Xmonnam(mtmp, 1));
return(0);
}

--- 521,527 -----
if(!strcmp(mtmp->data->mname, "demon")) { /* not for regular '&'s */

pline("%s mutters something about awful working conditions.",
! Xmonnam(mtmp));
return(0);
}

***************
*** 482,488
/* Slight advantage given. */
if(!strcmp(mtmp->data->mname, "demon prince") && mtmp->minvis) {

! if (!Blind) pline("%s appears before you.", Xmonnam(mtmp, 1));
mtmp->minvis = 0;
pmon(mtmp);
}

--- 528,534 -----
/* Slight advantage given. */
if(!strcmp(mtmp->data->mname, "demon prince") && mtmp->minvis) {

! if (!Blind) pline("%s appears before you.", Xmonnam(mtmp));
mtmp->minvis = 0;
pmon(mtmp);
}
***************
*** 489,495
if(u.usym == '&') { /* Won't blackmail their own. */

pline("%s says, 'Good hunting %s.' and vanishes",
! Xmonnam(mtmp, 1), flags.female ? "Sister" : "Brother");
rloc(mtmp);
return(1);
}

--- 535,541 -----
if(u.usym == '&') { /* Won't blackmail their own. */

pline("%s says, 'Good hunting %s.' and vanishes",
! Xmonnam(mtmp), flags.female ? "Sister" : "Brother");
rloc(mtmp);
return(1);
}
***************
*** 501,507
char buf[80];

pline("%s demands %d Zorkmids for safe passage.",
! Xmonnam(mtmp, 1), demand);
pline("how many will you offer him?");
getlin(buf);
sscanf(buf, "%d", &offer);

--- 547,553 -----
char buf[80];

pline("%s demands %d Zorkmids for safe passage.",
! Xmonnam(mtmp), demand);
pline("how many will you offer him?");
getlin(buf);
sscanf(buf, "%d", &offer);
*** ./mklev.c.orig Mon Feb 22 08:40:06 1988
--- ./mklev.c Thu Mar 31 09:08:55 1988
***************
*** 1,4
! /* SCCS Id: @(#)mklev.c 2.1 87/09/23
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */

#include "hack.h"

--- 1,4 -----
! /* SCCS Id: @(#)mklev.c 2.3 87/12/12
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */

#include "hack.h"
***************
*** 4,11
#include "hack.h"

extern char *getlogin(), *getenv();
! extern struct monst *makemon();
! extern struct obj *mkobj_at();
extern struct trap *maketrap();

#ifdef RPH

--- 4,11 -----
#include "hack.h"

extern char *getlogin(), *getenv();
! extern struct monst *makemon(), *mkmon_at();
! extern struct obj *mkobj_at(), *mksobj_at();
extern struct trap *maketrap();

#ifdef RPH
***************
*** 12,19
extern struct permonst pm_medusa;
#endif

! #define somex() ((rand()%(croom->hx-croom->lx+1))+croom->lx)
! #define somey() ((rand()%(croom->hy-croom->ly+1))+croom->ly)

#include "mkroom.h"
#define XLIM 4 /* define minimum required space around a room */

--- 12,20 -----
extern struct permonst pm_medusa;
#endif

! #ifdef STOOGES
! extern struct permonst pm_larry, pm_curly, pm_moe;
! #endif

#define somex() ((int)(rand()%(croom->hx-croom->lx+1))+croom->lx)
#define somey() ((int)(rand()%(croom->hy-croom->ly+1))+croom->ly)
***************
*** 15,20
#define somex() ((rand()%(croom->hx-croom->lx+1))+croom->lx)
#define somey() ((rand()%(croom->hy-croom->ly+1))+croom->ly)

#include "mkroom.h"
#define XLIM 4 /* define minimum required space around a room */
#define YLIM 3

--- 16,24 -----
extern struct permonst pm_larry, pm_curly, pm_moe;
#endif

+ #define somex() ((int)(rand()%(croom->hx-croom->lx+1))+croom->lx)
+ #define somey() ((int)(rand()%(croom->hy-croom->ly+1))+croom->ly)
+
#include "mkroom.h"
#define XLIM 4 /* define minimum required space around a room */
#define YLIM 3
***************
*** 60,72
oinit(); /* assign level dependent obj probabilities */
#ifdef RPH
if (u.wiz_level == 0) {
! u.medusa_level = rn1(3,25);
! u.wiz_level = d(3,10) + u.medusa_level;
! # ifdef WIZARD
! if (wizard && dlevel == 1)
! pline ("The wiz is at %d, and the medusa at %d",
! u.wiz_level, u.medusa_level);
! # endif
}
if (dlevel > u.medusa_level) {
makemaz();

--- 64,74 -----
oinit(); /* assign level dependent obj probabilities */
#ifdef RPH
if (u.wiz_level == 0) {
! u.medusa_level = rn1(3, (MAXLEVEL > 30) ? 25 : (MAXLEVEL - 4) );
! u.wiz_level = rn1(MAXLEVEL-u.medusa_level, u.medusa_level)+1;
! #ifdef STOOGES
! u.stooge_level = rn1(6,4);
! #endif
}
if (dlevel > u.medusa_level) {
makemaz();
***************
*** 96,101
mtmp->msleep = 1;
}
#endif
if(nroom > 1) {
troom = croom;
croom = &rooms[rn2(nroom-1)];

--- 98,124 -----
mtmp->msleep = 1;
}
#endif
+ #ifdef STOOGES
+ { struct monst *mtmp;
+ if (dlevel == u.stooge_level) { /* probably should use enexto */
+ mtmp = makemon(PM_MOE, xdnstair, ydnstair);
+ if (mtmp) mtmp->isstooge = 1;
+ if (mtmp) mtmp->mpeaceful = 1;
+ if (goodpos(xdnstair+1, ydnstair))
+ mtmp = makemon(PM_LARRY, xdnstair+1, ydnstair);
+ else if (goodpos(xdnstair-1, ydnstair))
+ mtmp = makemon(PM_LARRY, xdnstair-1, ydnstair);
+ if (mtmp) mtmp->isstooge = 1;
+ if (mtmp) mtmp->mpeaceful = 1;
+ if (goodpos(xdnstair, ydnstair+1))
+ mtmp = makemon(PM_CURLY, xdnstair, ydnstair+1);
+ else if (goodpos(xdnstair, ydnstair-1))
+ mtmp = makemon(PM_CURLY, xdnstair, ydnstair-1);
+ if (mtmp) mtmp->isstooge = 1;
+ if (mtmp) mtmp->mpeaceful = 1;
+ }
+ }
+ #endif
if(nroom > 1) {
troom = croom;
croom = &rooms[rn2(nroom-1)];
***************
*** 136,141
#ifdef FOUNTAINS
if(!rn2(10)) mkfount(0,croom);
#endif
if(!rn2(3)) {
(void) mkobj_at(0, somex(), somey());
tryct = 0;

--- 159,167 -----
#ifdef FOUNTAINS
if(!rn2(10)) mkfount(0,croom);
#endif
+ #ifdef SINKS
+ if(!rn2(80)) mksink(croom);
+ #endif
if(!rn2(3)) {
(void) mkobj_at(0, somex(), somey());
tryct = 0;
***************
*** 168,174
}

#ifdef WIZARD
! if(wizard && getenv("SHOPTYPE")) mkshop(); else
#endif
if(dlevel > 1 && dlevel < 20 && rn2(dlevel) < 3) mkshop();
else

--- 194,200 -----
}

#ifdef WIZARD
! if(wizard && getenv("SHOPTYPE")) mkroom(SHOPBASE); else
#endif
if(dlevel > 1 && dlevel < 20 && rn2(dlevel) < 3) mkroom(SHOPBASE);
else
***************
*** 170,176
#ifdef WIZARD
if(wizard && getenv("SHOPTYPE")) mkshop(); else
#endif
! if(dlevel > 1 && dlevel < 20 && rn2(dlevel) < 3) mkshop();
else
#ifdef NEWCLASS
if(dlevel > 4 && !rn2(6)) mkzoo(COURT);

--- 196,202 -----
#ifdef WIZARD
if(wizard && getenv("SHOPTYPE")) mkroom(SHOPBASE); else
#endif
! if(dlevel > 1 && dlevel < 20 && rn2(dlevel) < 3) mkroom(SHOPBASE);
else
#ifdef NEWCLASS
if(dlevel > 4 && !rn2(6)) mkroom(COURT);
***************
*** 173,179
if(dlevel > 1 && dlevel < 20 && rn2(dlevel) < 3) mkshop();
else
#ifdef NEWCLASS
! if(dlevel > 4 && !rn2(6)) mkzoo(COURT);
#endif
if(dlevel > 6 && !rn2(7)) mkzoo(ZOO);
else

--- 199,206 -----
if(dlevel > 1 && dlevel < 20 && rn2(dlevel) < 3) mkroom(SHOPBASE);
else
#ifdef NEWCLASS
! if(dlevel > 4 && !rn2(6)) mkroom(COURT);
! else
#endif
if(dlevel > 6 && !rn2(7)) mkroom(ZOO);
else
***************
*** 175,181
#ifdef NEWCLASS
if(dlevel > 4 && !rn2(6)) mkzoo(COURT);
#endif
! if(dlevel > 6 && !rn2(7)) mkzoo(ZOO);
else
if(dlevel > 9 && !rn2(5)) mkzoo(BEEHIVE);
else

--- 202,208 -----
if(dlevel > 4 && !rn2(6)) mkroom(COURT);
else
#endif
! if(dlevel > 6 && !rn2(7)) mkroom(ZOO);
else
if(dlevel > 9 && !rn2(5)) mkroom(BEEHIVE);
else
***************
*** 177,183
#endif
if(dlevel > 6 && !rn2(7)) mkzoo(ZOO);
else
! if(dlevel > 9 && !rn2(5)) mkzoo(BEEHIVE);
else
if(dlevel > 11 && !rn2(6)) mkzoo(MORGUE);
else

--- 204,210 -----
#endif
if(dlevel > 6 && !rn2(7)) mkroom(ZOO);
else
! if(dlevel > 9 && !rn2(5)) mkroom(BEEHIVE);
else
if(dlevel > 11 && !rn2(6)) mkroom(MORGUE);
else
***************
*** 179,185
else
if(dlevel > 9 && !rn2(5)) mkzoo(BEEHIVE);
else
! if(dlevel > 11 && !rn2(6)) mkzoo(MORGUE);
else
if(dlevel > 18 && !rn2(6)) mkswamp();
}

--- 206,212 -----
else
if(dlevel > 9 && !rn2(5)) mkroom(BEEHIVE);
else
! if(dlevel > 11 && !rn2(6)) mkroom(MORGUE);
else
#ifdef SAC
if(dlevel > 14 && !rn2(4)) mkroom(BARRACKS);
***************
*** 181,187
else
if(dlevel > 11 && !rn2(6)) mkzoo(MORGUE);
else
! if(dlevel > 18 && !rn2(6)) mkswamp();
}

makerooms() {

--- 208,218 -----
else
if(dlevel > 11 && !rn2(6)) mkroom(MORGUE);
else
! #ifdef SAC
! if(dlevel > 14 && !rn2(4)) mkroom(BARRACKS);
! else
! #endif
! if(dlevel > 18 && !rn2(6)) mkroom(SWAMP);
}

makerooms() {
***************
*** 700,705
#ifdef SPELLS
,""
#endif
};

makeniche(trap_type)

--- 731,745 -----
#ifdef SPELLS
,""
#endif
+ #ifdef KAA
+ ,""
+ #ifdef RPH
+ ,""
+ #endif
+ #endif
+ #ifdef SAC
+ ,""
+ #endif
};

makeniche(trap_type)
***************
*** 777,782
#ifdef NEWCLASS
nospikes, nolevltp,
#endif
tryct = 0;

xchar mx,my;

--- 817,825 -----
#ifdef NEWCLASS
nospikes, nolevltp,
#endif
+ #ifdef SAC
+ nolandmine,
+ #endif
tryct = 0;

xchar mx,my;
***************
*** 791,796
#ifdef SPIDERS
nospider = (dlevel < 7) ? 1 : 0;
#endif
nomimic = (dlevel < 9 || goldseen ) ? 1 : 0;
if(index(fut_geno, 'M')) nomimic = 1;

--- 834,842 -----
#ifdef SPIDERS
nospider = (dlevel < 7) ? 1 : 0;
#endif
+ #ifdef SAC
+ nolandmine = (dlevel < 5) ? 1 : 0;
+ #endif
nomimic = (dlevel < 9 || goldseen ) ? 1 : 0;
if(index(fut_geno, 'M')) nomimic = 1;

***************
*** 805,810
|| (kind == SPIKED_PIT && nospikes)
|| (kind == LEVEL_TELEP && nolevltp)
#endif
) kind = NO_TRAP;
} while(kind == NO_TRAP);
} else kind = num;

--- 851,859 -----
|| (kind == SPIKED_PIT && nospikes)
|| (kind == LEVEL_TELEP && nolevltp)
#endif
+ #ifdef SAC
+ || (kind == LANDMINE && nolandmine)
+ #endif
) kind = NO_TRAP;
} while(kind == NO_TRAP);
} else kind = num;
***************
*** 907,909
}
#endif /* FOUNTAINS /**/

--- 956,986 -----
}
#endif /* FOUNTAINS /**/

+ #ifdef SINKS
+ mksink(croom)
+ register struct mkroom *croom;
+ {
+ register xchar mx,my;
+ register int tryct = 0;
+
+ do {
+ if(++tryct > 200)
+ return;
+ mx = somex();
+ my = somey();
+ } while(t_at(mx, my) || levl[mx][my].typ == STAIRS
+ #ifdef FOUNTAINS
+ || IS_FOUNTAIN(levl[mx][my].typ)
+ #endif
+ #ifdef NEWCLASS
+ || IS_THRONE(levl[mx][my].typ)
+ #endif
+ );
+
+ /* Put a sink at mx, my */
+
+ levl[mx][my].typ = SINK;
+ levl[mx][my].scrsym = SINK_SYM;
+
+ }
+ #endif /* SINKS /**/
*** ./mkmaze.c.orig Thu Mar 31 08:35:21 1988
--- ./mkmaze.c Thu Mar 31 09:08:53 1988
***************
*** 1,4
! /* SCCS Id: @(#)mkmaze.c 2.1 87/10/18
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */

#include "hack.h"

--- 1,4 -----
! /* SCCS Id: @(#)mkmaze.c 2.3 88/03/31
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */

#include "hack.h"
***************
*** 3,9

#include "hack.h"
#include "mkroom.h" /* not really used */
! extern struct monst *makemon();
extern struct permonst pm_wizard;
extern struct obj *mkobj_at();
struct permonst hell_hound =

--- 3,9 -----

#include "hack.h"
#include "mkroom.h" /* not really used */
! extern struct monst *makemon(), *mkmon_at();
extern struct permonst pm_wizard;
extern struct obj *mkobj_at(), *mksobj_at();
struct permonst hell_hound =
***************
*** 5,11
#include "mkroom.h" /* not really used */
extern struct monst *makemon();
extern struct permonst pm_wizard;
! extern struct obj *mkobj_at();
struct permonst hell_hound =
{ "hell hound", 'd', 12, 14, 2, 20, 3, 6, 0 };

--- 5,11 -----
#include "mkroom.h" /* not really used */
extern struct monst *makemon(), *mkmon_at();
extern struct permonst pm_wizard;
! extern struct obj *mkobj_at(), *mksobj_at();
struct permonst hell_hound =
{ "hell hound", 'd', 12, 14, 2, 20, 3, 6, 0 };

*** ./mkobj.c.orig Mon Feb 22 08:40:07 1988
--- ./mkobj.c Thu Mar 31 09:08:55 1988
***************
*** 1,4
! /* SCCS Id: @(#)mkobj.c 2.2 87/11/29
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */

#include "hack.h"

--- 1,4 -----
! /* SCCS Id: @(#)mkobj.c 2.3 88/02/11
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */

#include "hack.h"
***************
*** 129,134
case GEM_SYM:
otmp->quan = rn2(6) ? 1 : 2;
case TOOL_SYM:
case CHAIN_SYM:
case BALL_SYM:
case ROCK_SYM:

--- 129,137 -----
case GEM_SYM:
otmp->quan = rn2(6) ? 1 : 2;
case TOOL_SYM:
+ if(otmp->otyp == LAMP) otmp->spe = rnd(10);
+ else if(otmp->otyp == MAGIC_LAMP) otmp->spe = 1;
+ else if(otmp->otyp == MAGIC_MARKER) otmp->spe = rnd(100);
case CHAIN_SYM:
case BALL_SYM:
case ROCK_SYM:
*** ./mkshop.c.orig Mon Feb 22 08:40:07 1988
--- ./mkshop.c Thu Mar 31 11:19:13 1988
***************
*** 1,4
! /* SCCS Id: @(#)mkshop.c 2.1 87/09/23
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */

#ifndef QUEST

--- 1,4 -----
! /* SCCS Id: @(#)mkshop.c 2.3 87/12/12
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */

/*
***************
*** 1,6
/* SCCS Id: @(#)mkshop.c 2.1 87/09/23
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */

#ifndef QUEST
#include "hack.h"
#include "mkroom.h"

--- 1,17 -----
/* SCCS Id: @(#)mkshop.c 2.3 87/12/12
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */

+ /*
+ * Entry points:
+ * mkroom() -- make and stock a room of a given type
+ * nexttodoor() -- return TRUE if adjacent to a door
+ * has_dnstairs() -- return TRUE if given room has a down staircase
+ * has_upstairs() -- return TRUE if given room has an up staircase
+ * dist2() -- Euclidean square-of-distance function
+ * courtmon() -- generate a court monster
+ *
+ * (note: this module should become mkroom.c in the next major release)
+ */
#ifndef QUEST
#include "hack.h"
#include "mkroom.h"
***************
*** 5,11
#include "hack.h"
#include "mkroom.h"
extern struct monst *makemon();
! extern struct obj *mkobj_at();
extern int nroom;

mkshop(){

--- 16,24 -----
#include "hack.h"
#include "mkroom.h"
extern struct monst *makemon();
! extern struct permonst pm_soldier;
! extern struct obj *mkobj_at(), *mksobj_at();
! extern void stock_room();
extern int nroom;

static boolean
***************
*** 8,13
extern struct obj *mkobj_at();
extern int nroom;

mkshop(){
register struct mkroom *sroom;
int roomno, i = -1;

--- 21,56 -----
extern void stock_room();
extern int nroom;

+ static boolean
+ isbig(sroom)
+ register struct mkroom *sroom;
+ {
+ register int area = (sroom->hx - sroom->lx) * (sroom->hy - sroom->ly);
+ return( area > 20 );
+ }
+
+ void
+ mkroom(roomtype)
+ /* make and stock a room of a given type */
+ int roomtype;
+ {
+ void mkshop(), mkzoo(), mkswamp();
+
+ if (roomtype >= SHOPBASE)
+ mkshop(); /* someday, we should be able to specify shop type */
+ else switch(roomtype)
+ {
+ case COURT: mkzoo(COURT); break;
+ case ZOO: mkzoo(ZOO); break;
+ case BEEHIVE: mkzoo(BEEHIVE); break;
+ case MORGUE: mkzoo(MORGUE); break;
+ case BARRACKS: mkzoo(BARRACKS); break;
+ case SWAMP: mkswamp(); break;
+ default: impossible("Tried to make a room of type %d.", roomtype);
+ }
+ }
+
+ static void
mkshop(){
register struct mkroom *sroom;
int roomno, i = -1;
***************
*** 36,41
return;
}
#endif
if(*ep == 's' || *ep == 'S'){
mkswamp();
return;

--- 79,90 -----
return;
}
#endif
+ #ifdef SAC
+ if(*ep == '3'){
+ mkzoo(BARRACKS);
+ return;
+ }
+ #endif /* SAC */
if(*ep == 's' || *ep == 'S'){
mkswamp();
return;
***************
*** 85,90
stock_room(&(shtypes[i]), sroom);
}

mkzoo(type)
int type;
{

--- 134,140 -----
stock_room(&(shtypes[i]), sroom);
}

+ static void
mkzoo(type)
int type;
{
***************
*** 122,127
#ifdef NEWCLASS
(type == COURT) ? courtmon() :
#endif
(type == MORGUE) ? morguemon() :
(type == BEEHIVE) ? PM_KILLER_BEE : (struct permonst *) 0,
sx, sy);

--- 172,180 -----
#ifdef NEWCLASS
(type == COURT) ? courtmon() :
#endif
+ #ifdef SAC
+ (type == BARRACKS) ? PM_SOLDIER :
+ #endif
(type == MORGUE) ? morguemon() :
(type == BEEHIVE) ? PM_KILLER_BEE : (struct permonst *) 0,
sx, sy);
***************
*** 158,164

}

! struct permonst *
morguemon()
{
extern struct permonst pm_ghost;

--- 211,217 -----

}

! static struct permonst *
morguemon()
{
extern struct permonst pm_ghost;
***************
*** 169,174
return((i < 40) ? PM_GHOST : (i < 60) ? PM_WRAITH : PM_ZOMBIE);
}

mkswamp() /* Michiel Huisjes & Fred de Wilde */
{
register struct mkroom *sroom;

--- 222,228 -----
return((i < 40) ? PM_GHOST : (i < 60) ? PM_WRAITH : PM_ZOMBIE);
}

+ static void
mkswamp() /* Michiel Huisjes & Fred de Wilde */
{
register struct mkroom *sroom;
***************
*** 197,202
}
}

nexttodoor(sx,sy)
register sx,sy;
{

--- 251,257 -----
}
}

+ boolean
nexttodoor(sx,sy)
register sx,sy;
{
***************
*** 205,212
for(dx = -1; dx <= 1; dx++) for(dy = -1; dy <= 1; dy++)
if((lev = &levl[sx+dx][sy+dy])->typ == DOOR ||
lev->typ == SDOOR || lev->typ == LDOOR)
! return(1);
! return(0);
}

has_dnstairs(sroom)

--- 260,267 -----
for(dx = -1; dx <= 1; dx++) for(dy = -1; dy <= 1; dy++)
if((lev = &levl[sx+dx][sy+dy])->typ == DOOR ||
lev->typ == SDOOR || lev->typ == LDOOR)
! return(TRUE);
! return(FALSE);
}

boolean
***************
*** 209,214
return(0);
}

has_dnstairs(sroom)
register struct mkroom *sroom;
{

--- 264,270 -----
return(FALSE);
}

+ boolean
has_dnstairs(sroom)
register struct mkroom *sroom;
{
***************
*** 216,221
sroom->ly <= ydnstair && ydnstair <= sroom->hy);
}

has_upstairs(sroom)
register struct mkroom *sroom;
{

--- 272,278 -----
sroom->ly <= ydnstair && ydnstair <= sroom->hy);
}

+ boolean
has_upstairs(sroom)
register struct mkroom *sroom;
{
***************
*** 223,235
sroom->ly <= yupstair && yupstair <= sroom->hy);
}

! isbig(sroom)
! register struct mkroom *sroom;
! {
! register int area = (sroom->hx - sroom->lx) * (sroom->hy - sroom->ly);
! return( area > 20 );
! }
!
dist2(x0,y0,x1,y1){
return((x0-x1)*(x0-x1) + (y0-y1)*(y0-y1));
}

--- 280,286 -----
sroom->ly <= yupstair && yupstair <= sroom->hy);
}

! int
dist2(x0,y0,x1,y1){
return((x0-x1)*(x0-x1) + (y0-y1)*(y0-y1));
}
***************
*** 234,239
return((x0-x1)*(x0-x1) + (y0-y1)*(y0-y1));
}

sq(a) int a; {
return(a*a);
}

--- 285,291 -----
return((x0-x1)*(x0-x1) + (y0-y1)*(y0-y1));
}

+ static int
sq(a) int a; {
return(a*a);
}
SHAR_EOF
if test 31961 -ne "`wc -c < 'Update.2.3.c'`"
then
echo shar: error transmitting "'Update.2.3.c'" '(should have been 31961 characters)'
fi
fi # end of overwriting check
# End of shell archive
exit 0
--
Mike Stephenson

Mail: Genamation Inc. Phone: (416) 475-9434
351 Steelcase Rd. W
Markham, Ontario. UUCP: uunet!{mnetor,utzoo}!genat!genpyr!mike
Canada L3R 3W1 uunet!{mnetor,utzoo}!genat!mike

0 new messages