mike@genpyr.UUCP (Mike Stephenson) (04/13/88)
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