#overview enhancements (trunk only)
1) add graves to the dungeon features being tracked;
2) report on known bones (determined by seeing map spot(s) where previous
hero(es) died since there's no guarantee of graves or ghosts);
3) add automatic annotations for oracle, sokoban, bigroom, rogue level,
Ft.Ludios, castle, valley, and Moloch's sanctum. For bigroom and rogue
level you just need to visit that level, for the others you need to get
far enough along to learn something specific (oracle: her room, sokoban:
annotation is either "solved" or "unsolved" depending upon whether all
the holes and pits have been filled, fort and castle: see the drawbridge,
valley and sanctum: see inside the tended temple). Discovering the
relevant locations via magic mapping counts as "far enough along".
There should probably also be automatic annotations for Medusa and the
vibrating square but I'm not sure what criteria should be used for the
former or what phrasing to use for the latter. Demon lord/prince lairs fall
into similar category as Medusa.
TODO: add final #overview as an end of game disclosure option. (I was
planning this even before I saw that nitrohack has implemented it....)
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
/* NetHack 3.5 dungeon.h $Date$ $Revision$ */
|
||||
/* SCCS Id: @(#)dungeon.h 3.5 2007/06/15 */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -191,47 +190,59 @@ struct linfo {
|
||||
#define MSA_NEUTRAL 2
|
||||
#define MSA_CHAOTIC 3
|
||||
|
||||
typedef struct mapseen_feat {
|
||||
/* feature knowledge that must be calculated from levl array */
|
||||
Bitfield(nfount, 2);
|
||||
Bitfield(nsink, 2);
|
||||
Bitfield(naltar, 2);
|
||||
Bitfield(msalign, 2); /* corresponds to MSA_* above */
|
||||
Bitfield(nthrone, 2);
|
||||
Bitfield(ntree, 2);
|
||||
/* water, lava, ice are too verbose so commented out for now */
|
||||
/*
|
||||
Bitfield(water, 1);
|
||||
Bitfield(lava, 1);
|
||||
Bitfield(ice, 1);
|
||||
*/
|
||||
|
||||
/* calculated from rooms array */
|
||||
Bitfield(nshop, 2);
|
||||
Bitfield(ntemple, 2);
|
||||
Bitfield(shoptype, 5);
|
||||
|
||||
Bitfield(forgot, 1); /* player has forgotten about this level? */
|
||||
} mapseen_feat;
|
||||
|
||||
/* for mapseen->rooms */
|
||||
#define MSR_SEEN 1
|
||||
|
||||
/* what the player knows about a single dungeon level */
|
||||
/* initialized in mklev() */
|
||||
typedef struct mapseen {
|
||||
struct mapseen *next; /* next map in the chain */
|
||||
branch *br; /* knows about branch via taking it in goto_level */
|
||||
d_level lev; /* corresponding dungeon level */
|
||||
struct mapseen_feat {
|
||||
/* feature knowledge that must be calculated from levl array */
|
||||
Bitfield(nfount, 2);
|
||||
Bitfield(nsink, 2);
|
||||
Bitfield(naltar, 2);
|
||||
Bitfield(nthrone, 2);
|
||||
|
||||
mapseen_feat feat;
|
||||
Bitfield(ngrave, 2);
|
||||
Bitfield(ntree, 2);
|
||||
Bitfield(water, 2);
|
||||
Bitfield(lava, 2);
|
||||
|
||||
Bitfield(ice, 2);
|
||||
/* calculated from rooms array */
|
||||
Bitfield(nshop, 2);
|
||||
Bitfield(ntemple, 2);
|
||||
/* altar alignment; MSA_NONE if there is more than one and
|
||||
they aren't all the same */
|
||||
Bitfield(msalign, 2);
|
||||
|
||||
Bitfield(shoptype, 5);
|
||||
} feat;
|
||||
struct mapseen_flags {
|
||||
Bitfield(forgot, 1); /* player has forgotten about this level */
|
||||
Bitfield(knownbones, 1); /* player aware of bones */
|
||||
Bitfield(oracle, 1);
|
||||
Bitfield(sokosolved, 1);
|
||||
Bitfield(bigroom, 1);
|
||||
Bitfield(castle, 1);
|
||||
Bitfield(castletune, 1); /* add tune hint to castle annotation */
|
||||
Bitfield(valley, 1);
|
||||
|
||||
Bitfield(msanctum, 1);
|
||||
Bitfield(ludios, 1);
|
||||
# ifdef REINCARNATION
|
||||
Bitfield(roguelevel, 1);
|
||||
# endif
|
||||
} flags;
|
||||
/* custom naming */
|
||||
char *custom;
|
||||
unsigned custom_lth;
|
||||
|
||||
/* maybe this should just be in struct mkroom? */
|
||||
schar rooms[(MAXNROFROOMS+1)*2];
|
||||
struct mapseen_rooms {
|
||||
Bitfield(seen, 1);
|
||||
Bitfield(untended, 1); /* flag for shop without shk */
|
||||
} msrooms[(MAXNROFROOMS+1)*2]; /* same size as rooms[] */
|
||||
/* dead heroes; might not have graves or ghosts */
|
||||
struct cemetery *final_resting_place; /* same as level.bonesinfo */
|
||||
} mapseen;
|
||||
|
||||
#endif /* DUNGEON_OVERVIEW */
|
||||
|
||||
@@ -590,6 +590,8 @@ E int NDECL(dooverview);
|
||||
E void FDECL(forget_mapseen, (int));
|
||||
E void FDECL(init_mapseen, (d_level *));
|
||||
E void NDECL(recalc_mapseen);
|
||||
E void FDECL(mapseen_temple, (struct monst *));
|
||||
E void FDECL(room_discovered, (int));
|
||||
E void FDECL(recbranch_mapseen, (d_level *, d_level *));
|
||||
E void FDECL(remdun_mapseen, (int));
|
||||
#endif /* DUNGEON_OVERVIEW */
|
||||
@@ -1931,6 +1933,7 @@ E NhRegion* FDECL(create_gas_cloud, (XCHAR_P, XCHAR_P, int, int));
|
||||
|
||||
E void FDECL(inven_inuse, (BOOLEAN_P));
|
||||
E int FDECL(dorecover, (int));
|
||||
E void FDECL(restcemetery, (int,struct cemetery **));
|
||||
E void FDECL(trickery, (char *));
|
||||
E void FDECL(getlev, (int,int,XCHAR_P,BOOLEAN_P));
|
||||
E void FDECL(get_plname_from_file, (int, char *));
|
||||
@@ -2030,6 +2033,7 @@ E void FDECL(def_bclose, (int));
|
||||
#if defined(ZEROCOMP)
|
||||
E void FDECL(zerocomp_bclose, (int));
|
||||
#endif
|
||||
E void FDECL(savecemetery, (int,int,struct cemetery **));
|
||||
E void FDECL(savefruitchn, (int,int));
|
||||
E void FDECL(store_plname_in_file, (int));
|
||||
E void NDECL(free_dungeons);
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
* Incrementing EDITLEVEL can be used to force invalidation of old bones
|
||||
* and save files.
|
||||
*/
|
||||
#define EDITLEVEL 52
|
||||
#define EDITLEVEL 53
|
||||
|
||||
#define COPYRIGHT_BANNER_A \
|
||||
"NetHack, Copyright 1985-2012"
|
||||
|
||||
Reference in New Issue
Block a user