add some new, easier achievements

Introduce eight achievements that can be attained by more players.
 Entered Gnomish Mines  - self explanatory
 Entered Mine Town      - the town portion, not just the level
 Entered a shop         - any tended shop on any level
 Entered a temple       - likewise for temple
 Consulted the Oracle   - bought at least one major or minor oracle
 Read a Discworld Novel - read at least one passage
 Entered Sokoban        - like mines
 Entered the Big Room   - not always possible since not always present

The novel and bigroom ones aren't always achieveable since novels are
only guaranteed if a book or scroll shop gets created and bigroom is
only guaranteed in wizard mode.  No one ever claimed that every
possible achievement can be attained in a single game.  (If one for
entering the Fort Ludios level--or perhaps entering the Fort itself--
eventually gets add, that won't be possible in every game either.)

The mine town one probably needs some tweaking.  Two of the town's
seven variants have no town boundary (despite a rectangular area of
pre-defined map) and at present simply arriving on either of those
levels is enough to be credited with the entered-town achievement.

Bump EDITLEVEL because u.uachieved[] has increased in size.  This
time it has been expanded to the maximum that xlogfile's bitmask of
achievements can handle, enough for up to 9 more achievements without
another EDITLEVEL increment.
This commit is contained in:
PatR
2020-02-12 14:35:37 -08:00
parent 1ec6e6f96b
commit 804499d9be
15 changed files with 195 additions and 88 deletions

View File

@@ -1624,12 +1624,6 @@ boolean at_stairs, falling, portal;
/* special levels can have a custom arrival message */
deliver_splev_message();
/* give room entrance message, if any */
check_special_room(FALSE);
/* deliver objects traveling with player */
obj_delivery(TRUE);
/* Check whether we just entered Gehennom. */
if (!In_hell(&u.uz0) && Inhell) {
if (Is_valley(&u.uz)) {
@@ -1701,9 +1695,18 @@ boolean at_stairs, falling, portal;
mtmp->msleeping = 0;
}
}
} else if (In_mines(&u.uz)) {
if (newdungeon)
record_achievement(ACH_MINE);
} else if (In_sokoban(&u.uz)) {
if (newdungeon)
record_achievement(ACH_SOKO);
} else {
if (new && Is_rogue_level(&u.uz))
if (new && Is_rogue_level(&u.uz)) {
You("enter what seems to be an older, more primitive world.");
} else if (new && Is_bigroom(&u.uz)) {
record_achievement(ACH_BGRM);
}
/* main dungeon message from your quest leader */
if (!In_quest(&u.uz0) && at_dgn_entrance("The Quest")
&& !(u.uevent.qcompleted || u.uevent.qexpelled
@@ -1727,6 +1730,11 @@ boolean at_stairs, falling, portal;
if ((annotation = get_annotation(&u.uz)) != 0)
You("remember this level as %s.", annotation);
/* give room entrance message, if any */
check_special_room(FALSE);
/* deliver objects traveling with player */
obj_delivery(TRUE);
/* assume this will always return TRUE when changing level */
(void) in_out_region(u.ux, u.uy);
(void) pickup(1);