Deliberate level teleporter activation ignores magic resistance
This is aimed at providing a little quality of life in the form of not having to divest yourself of your sources of magic resistance before using a level teleporter. The player is already able to use regular teleport traps while Antimagic; there's no reason why it should be different for level teleporters. This ultimately comes from "Stevie-O's level teleporter jump patch", by way of SliceHack. I simplified it a bit: deliberately jumping onto the trap always takes time even if it fails to levelport you (which would only happen with level teleporters in the End Game, which don't exist).
This commit is contained in:
committed by
Pasi Kallinen
parent
63d3d7b688
commit
da3afd39d2
@@ -110,6 +110,7 @@ make hero polymorphed into baby purple worm warned against shriekers
|
||||
confused scroll of light summons tame cancelled lights
|
||||
potions of hallucination can give enlightenment
|
||||
add a small chance of surviving food poisoning
|
||||
deliberate level teleporter activation ignores magic resistance
|
||||
|
||||
|
||||
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
|
||||
|
||||
@@ -682,23 +682,34 @@ boolean break_the_rules; /* True: wizard mode ^T */
|
||||
boolean trap_once = FALSE;
|
||||
|
||||
trap = t_at(u.ux, u.uy);
|
||||
if (trap && (!trap->tseen || trap->ttyp != TELEP_TRAP))
|
||||
if (trap && !trap->tseen)
|
||||
trap = 0;
|
||||
|
||||
if (trap) {
|
||||
trap_once = trap->once; /* trap may get deleted, save this */
|
||||
if (trap->once) {
|
||||
pline("This is a vault teleport, usable once only.");
|
||||
if (yn("Jump in?") == 'n') {
|
||||
trap = 0;
|
||||
} else {
|
||||
deltrap(trap);
|
||||
newsym(u.ux, u.uy);
|
||||
if (trap->ttyp == LEVEL_TELEP && trap->tseen) {
|
||||
if (yn("There is a level teleporter here. Trigger it?") == 'y') {
|
||||
level_tele_trap(trap, FORCETRAP);
|
||||
/* deliberate jumping will always take time even if it doesn't
|
||||
* work */
|
||||
return 1;
|
||||
} else
|
||||
trap = 0; /* continue with normal horizontal teleport */
|
||||
} else if (trap->ttyp == TELEP_TRAP) {
|
||||
trap_once = trap->once; /* trap may get deleted, save this */
|
||||
if (trap->once) {
|
||||
pline("This is a vault teleport, usable once only.");
|
||||
if (yn("Jump in?") == 'n') {
|
||||
trap = 0;
|
||||
} else {
|
||||
deltrap(trap);
|
||||
newsym(u.ux, u.uy);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (trap)
|
||||
You("%s onto the teleportation trap.",
|
||||
locomotion(g.youmonst.data, "jump"));
|
||||
if (trap)
|
||||
You("%s onto the teleportation trap.",
|
||||
locomotion(g.youmonst.data, "jump"));
|
||||
} else
|
||||
trap = 0;
|
||||
}
|
||||
if (!trap) {
|
||||
boolean castit = FALSE;
|
||||
@@ -1112,19 +1123,21 @@ struct trap *trap;
|
||||
unsigned trflags;
|
||||
{
|
||||
char verbbuf[BUFSZ];
|
||||
boolean intentional = FALSE;
|
||||
|
||||
if ((trflags & VIASITTING) != 0)
|
||||
if ((trflags & (VIASITTING|FORCETRAP)) != 0) {
|
||||
Strcpy(verbbuf, "trigger"); /* follows "You sit down." */
|
||||
else
|
||||
intentional = TRUE;
|
||||
} else
|
||||
Sprintf(verbbuf, "%s onto",
|
||||
Levitation ? (const char *) "float"
|
||||
: locomotion(g.youmonst.data, "step"));
|
||||
You("%s a level teleport trap!", verbbuf);
|
||||
|
||||
if (Antimagic) {
|
||||
if (Antimagic && !intentional) {
|
||||
shieldeff(u.ux, u.uy);
|
||||
}
|
||||
if (Antimagic || In_endgame(&u.uz)) {
|
||||
if ((Antimagic && !intentional) || In_endgame(&u.uz)) {
|
||||
You_feel("a wrenching sensation.");
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user