Tourists gain experience by seeing new types of creatures up close

Experience equivalent to killing a monster is gained when starting a turn
adjacent to and being able to see the monster.

Breaks saves.

Idea and parts of code via dNetHack
This commit is contained in:
Pasi Kallinen
2024-12-06 21:26:47 +02:00
parent 5eb7566eba
commit 89c4c3a722
4 changed files with 27 additions and 1 deletions

View File

@@ -2730,6 +2730,7 @@ enlightenment/attribute disclosure for saving-grace: include a line for have
"X " for explore mode, or "D " for debug mode if any of the games
shown in its menu weren't saved during normal play; if they're all
normal play, the prefix is suppressed
tourists gain experience by seeing new types of creatures up close
Platform- and/or Interface-Specific New Features

View File

@@ -673,6 +673,7 @@ struct mvitals {
uchar born;
uchar died;
uchar mvflags;
Bitfield(seen_close, 1);
};

View File

@@ -17,7 +17,7 @@
* Incrementing EDITLEVEL can be used to force invalidation of old bones
* and save files.
*/
#define EDITLEVEL 110
#define EDITLEVEL 111
/*
* Development status possibilities.

View File

@@ -14,6 +14,7 @@
staticfn void moveloop_preamble(boolean);
staticfn void u_calc_moveamt(int);
staticfn void see_nearby_monsters(void);
staticfn void maybe_do_tutorial(void);
#ifdef POSITIONBAR
staticfn void do_positionbar(void);
@@ -154,6 +155,28 @@ u_calc_moveamt(int wtcap)
u.umovement = 0;
}
/* mark a monster type as seen when we see it next to us */
staticfn void
see_nearby_monsters(void)
{
coordxy x, y;
if (Blind || !Role_if(PM_TOURIST))
return;
for (x = u.ux - 1; x <= u.ux + 1; x++)
for (y = u.uy - 1; y <= u.uy + 1; y++)
if (isok(x, y) && MON_AT(x, y)) {
struct monst *mtmp = m_at(x, y);
if (canseemon(mtmp) && !svm.mvitals[monsndx(mtmp->data)].seen_close) {
svm.mvitals[monsndx(mtmp->data)].seen_close = TRUE;
more_experienced(experience(mtmp, 0), 0);
newexplevel();
}
}
}
#if defined(MICRO) || defined(WIN32)
static int mvl_abort_lev;
#endif
@@ -410,6 +433,7 @@ moveloop_core(void)
else if (u.uburied)
under_ground(0);
see_nearby_monsters();
} /* actual time passed */
/****************************************/