Delphi follow-up (trunk only)

This commit is contained in:
nethack.allison
2006-05-11 21:22:06 +00:00
parent a73d997034
commit 4e2b302368

View File

@@ -13,7 +13,7 @@ STATIC_DCL int FDECL(still_chewing,(XCHAR_P,XCHAR_P));
STATIC_DCL void NDECL(dosinkfall); STATIC_DCL void NDECL(dosinkfall);
#endif #endif
STATIC_DCL boolean FDECL(findtravelpath, (BOOLEAN_P)); STATIC_DCL boolean FDECL(findtravelpath, (BOOLEAN_P));
STATIC_DCL boolean FDECL(monstinroom, (struct permonst *,int,struct monst **)); STATIC_DCL struct monst *FDECL(monstinroom, (struct permonst *,int));
STATIC_DCL boolean FDECL(doorless_door, (int,int)); STATIC_DCL boolean FDECL(doorless_door, (int,int));
STATIC_DCL void FDECL(move_update, (BOOLEAN_P)); STATIC_DCL void FDECL(move_update, (BOOLEAN_P));
@@ -1648,25 +1648,19 @@ stillinwater:;
} }
} }
STATIC_OVL boolean /* returns first matching monster */
monstinroom(mdat,roomno,mon) STATIC_OVL struct monst *
monstinroom(mdat,roomno)
struct permonst *mdat; struct permonst *mdat;
struct monst **mon;
int roomno; int roomno;
{ {
register struct monst *mtmp; register struct monst *mtmp;
if (mon) *mon = (struct monst *)0;
for(mtmp = fmon; mtmp; mtmp = mtmp->nmon) for(mtmp = fmon; mtmp; mtmp = mtmp->nmon)
if(!DEADMONSTER(mtmp) && mtmp->data == mdat && if(!DEADMONSTER(mtmp) && mtmp->data == mdat &&
index(in_rooms(mtmp->mx, mtmp->my, 0), roomno + ROOMOFFSET)) { index(in_rooms(mtmp->mx, mtmp->my, 0), roomno + ROOMOFFSET))
/* If the monster is one-of-a-kind then update mon return mtmp;
* with a pointer to that monster. return (struct monst *)0;
*/
if (mon && (mdat->geno & G_UNIQ)) *mon = mtmp;
return(TRUE);
}
return(FALSE);
} }
char * char *
@@ -1808,7 +1802,7 @@ void
check_special_room(newlev) check_special_room(newlev)
register boolean newlev; register boolean newlev;
{ {
struct monst *mtmp, *uniquemon = (struct monst *)0; register struct monst *mtmp;
char *ptr; char *ptr;
move_update(newlev); move_update(newlev);
@@ -1862,24 +1856,26 @@ register boolean newlev;
You("enter an anthole!"); You("enter an anthole!");
break; break;
case BARRACKS: case BARRACKS:
if(monstinroom(&mons[PM_SOLDIER], roomno, &uniquemon) || if(monstinroom(&mons[PM_SOLDIER], roomno) ||
monstinroom(&mons[PM_SERGEANT], roomno, &uniquemon) || monstinroom(&mons[PM_SERGEANT], roomno) ||
monstinroom(&mons[PM_LIEUTENANT], roomno, &uniquemon) || monstinroom(&mons[PM_LIEUTENANT], roomno) ||
monstinroom(&mons[PM_CAPTAIN], roomno, &uniquemon)) monstinroom(&mons[PM_CAPTAIN], roomno))
You("enter a military barracks!"); You("enter a military barracks!");
else else
You("enter an abandoned barracks."); You("enter an abandoned barracks.");
break; break;
case DELPHI: case DELPHI:
if(monstinroom(&mons[PM_ORACLE], roomno, &uniquemon)) { {
if (uniquemon && !uniquemon->mpeaceful) struct monst *oracle = monstinroom(&mons[PM_ORACLE],
roomno);
if (oracle && !oracle->mpeaceful)
verbalize("You're in Delphi, %s.", verbalize("You're in Delphi, %s.",
plname); plname);
else else
verbalize("%s, %s, welcome to Delphi!", verbalize("%s, %s, welcome to Delphi!",
Hello((struct monst *) 0), plname); Hello((struct monst *) 0), plname);
break;
} }
break;
case TEMPLE: case TEMPLE:
intemple(roomno + ROOMOFFSET); intemple(roomno + ROOMOFFSET);
/* fall through */ /* fall through */