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:
13
src/hack.c
13
src/hack.c
@@ -2198,7 +2198,7 @@ boolean pick;
|
||||
check_special_room(FALSE);
|
||||
if (IS_SINK(levl[u.ux][u.uy].typ) && Levitation)
|
||||
dosinkfall();
|
||||
if (!g.in_steed_dismounting) { /* if dismounting, we'll check again later */
|
||||
if (!g.in_steed_dismounting) { /* if dismounting, check again later */
|
||||
boolean pit;
|
||||
|
||||
/* if levitation is due to time out at the end of this
|
||||
@@ -2462,7 +2462,7 @@ register boolean newlev;
|
||||
/* possibly deliver a one-time room entry message */
|
||||
void
|
||||
check_special_room(newlev)
|
||||
register boolean newlev;
|
||||
boolean newlev;
|
||||
{
|
||||
register struct monst *mtmp;
|
||||
char *ptr;
|
||||
@@ -2475,6 +2475,12 @@ register boolean newlev;
|
||||
if (!*u.uentered && !*u.ushops_entered) /* implied by newlev */
|
||||
return; /* no entrance messages necessary */
|
||||
|
||||
if (!g.context.achieveo.minetn_reached
|
||||
&& In_mines(&u.uz) && in_town(u.ux, u.uy)) {
|
||||
record_achievement(ACH_TOWN);
|
||||
g.context.achieveo.minetn_reached = TRUE;
|
||||
}
|
||||
|
||||
/* Did we just enter a shop? */
|
||||
if (*u.ushops_entered)
|
||||
u_entered_shop(u.ushops_entered);
|
||||
@@ -2504,6 +2510,7 @@ register boolean newlev;
|
||||
case MORGUE:
|
||||
if (midnight()) {
|
||||
const char *run = locomotion(g.youmonst.data, "Run");
|
||||
|
||||
pline("%s away! %s away!", run, run);
|
||||
} else
|
||||
You("have an uncanny feeling...");
|
||||
@@ -2528,6 +2535,7 @@ register boolean newlev;
|
||||
break;
|
||||
case DELPHI: {
|
||||
struct monst *oracle = monstinroom(&mons[PM_ORACLE], roomno);
|
||||
|
||||
if (oracle) {
|
||||
if (!oracle->mpeaceful)
|
||||
verbalize("You're in Delphi, %s.", g.plname);
|
||||
@@ -2586,7 +2594,6 @@ register boolean newlev;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user