Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss
Groups keyboard shortcuts have been updated
Dismiss
See shortcuts

NetHack 2.3 Update Pt. 07 of 12

9 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