Major amnesia revamp
Instead of forgetting maps and objects, make amnesia forget skills. Forgetting maps and objects could be circumvented with taking notes, or by using an external tool to remember the forgotten levels. Forgetting skills allows the player to optionally go down another skill path, if they trained the wrong weapon in the early game. Amnesia still forgets spells. As a replacement for the deja vu messages when entering a forgotten level, those messages will now indicate a ghost with your own name existing on the level, given only when the level is entered for the first time. These changes based on fiqhack, with some adjustments.
This commit is contained in:
@@ -1958,7 +1958,7 @@ const char *nam;
|
||||
&& dlev.dnum == valley_level.dnum))
|
||||
&& (/* either wizard mode or else seen and not forgotten */
|
||||
wizard
|
||||
|| (g.level_info[idx].flags & (FORGOTTEN | VISITED))
|
||||
|| (g.level_info[idx].flags & (VISITED))
|
||||
== VISITED)) {
|
||||
lev = depth(&dlev);
|
||||
}
|
||||
@@ -1973,9 +1973,9 @@ const char *nam;
|
||||
idx &= 0x00FF;
|
||||
/* either wizard mode, or else _both_ sides of branch seen */
|
||||
if (wizard
|
||||
|| (((g.level_info[idx].flags & (FORGOTTEN | VISITED))
|
||||
|| (((g.level_info[idx].flags & (VISITED))
|
||||
== VISITED)
|
||||
&& ((g.level_info[idxtoo].flags & (FORGOTTEN | VISITED))
|
||||
&& ((g.level_info[idxtoo].flags & (VISITED))
|
||||
== VISITED))) {
|
||||
if (ledger_to_dnum(idxtoo) == u.uz.dnum)
|
||||
idx = idxtoo;
|
||||
@@ -2392,35 +2392,6 @@ const char *s;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
forget_mapseen(ledger_num)
|
||||
int ledger_num;
|
||||
{
|
||||
mapseen *mptr;
|
||||
struct cemetery *bp;
|
||||
|
||||
for (mptr = g.mapseenchn; mptr; mptr = mptr->next)
|
||||
if (g.dungeons[mptr->lev.dnum].ledger_start + mptr->lev.dlevel
|
||||
== ledger_num)
|
||||
break;
|
||||
|
||||
/* if not found, then nothing to forget */
|
||||
if (mptr) {
|
||||
mptr->flags.forgot = 1;
|
||||
mptr->br = (branch *) 0;
|
||||
|
||||
/* custom names are erased, not just forgotten until revisited */
|
||||
if (mptr->custom) {
|
||||
mptr->custom_lth = 0;
|
||||
free((genericptr_t) mptr->custom);
|
||||
mptr->custom = (char *) 0;
|
||||
}
|
||||
(void) memset((genericptr_t) mptr->msrooms, 0, sizeof mptr->msrooms);
|
||||
for (bp = mptr->final_resting_place; bp; bp = bp->next)
|
||||
bp->bonesknown = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
rm_mapseen(ledger_num)
|
||||
int ledger_num;
|
||||
|
||||
Reference in New Issue
Block a user