Fixing a buglist bug. Also changing an unrelated buglist item a bit (it was

mine to begin with, I thought I had a way to fix it but it turns out I didn't,
so I was researching it again).

Checked into CVS.
This commit is contained in:
arromdee
2002-01-13 20:37:18 +00:00
parent f19a999b9c
commit b09c3e2e69
5 changed files with 33 additions and 17 deletions

View File

@@ -3,10 +3,6 @@ Buglist: actual bugs that may get fixed someday
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
============================================================================= =============================================================================
Using the '>' command to end controlled levitation doesn't set the
Heart of Ahriman's invocation timeout, allowing the player to resume
levitating immediately via #invoke.
A funny thing happened at the portal to Rodney's tower. Wearing A funny thing happened at the portal to Rodney's tower. Wearing
levitation boots, I floated onto the portal, and was ported to the levitation boots, I floated onto the portal, and was ported to the
tower. Then I took off my boots, and got "You activated the magic tower. Then I took off my boots, and got "You activated the magic
@@ -250,17 +246,13 @@ small and quick (so the missile whizzed by)? Is the monster flying or on the
ground? Is the player levitating? Is the player unusually short or tall ground? Is the player levitating? Is the player unusually short or tall
(i.e., if the player is polymorphed), etc.... (i.e., if the player is polymorphed), etc....
There is a problem with alignment: if you change alignment, peaceful monsters Monsters don't change either peacefulness or malign when the player changes
all stay the same and killing them is now bad for your new alignment--and thus alignment. This can't be fixed because it would be impossible to ensure that
good for your old alignment. The "obvious" solution is to change the two alignment switches put the monsters back the way they were. For one thing,
peacefulness and relative alignment of the monsters whenever your alignment monster peacefulness is based on the player's alignment record as well as his
changes. This does not work because since monsters only have a percentage type (and we don't want to change peacefulness every time the record changes!),
chance of peacefulness due to alignment, you can change and change back, and for another, the monster's peacefulness might have changed from its initial
whereupon the monster peacefulness will be distributed differently than when value and two switches wouldn't bring it back to normal.
you started. This also ignores monsters on other levels, whose peacefulness
distribution would not change--for consistency, if you changed from lawful to
chaotic and back, since peacefulness of monsters on your own level got
redistributed, so would peacefulness on those other levels.
You can open/close doors diagonally, but cannot enter them diagonally. This You can open/close doors diagonally, but cannot enter them diagonally. This
seems inconsistent. [Comment: The main reason why this is blocked is seems inconsistent. [Comment: The main reason why this is blocked is

View File

@@ -384,6 +384,7 @@ monsters who can cast undirected spells don't need to be in combat with you
messages consistent for all monster spells messages consistent for all monster spells
monsters casting spells at your displaced image now set mspec_used monsters casting spells at your displaced image now set mspec_used
monsters without ranged spells don't print curse messages for ranged spells monsters without ranged spells don't print curse messages for ranged spells
going down to floor using > should set Heart of Ahriman invocation timeout
Platform- and/or Interface-Specific Fixes Platform- and/or Interface-Specific Fixes

View File

@@ -77,6 +77,7 @@ E int NDECL(doinvoke);
E void FDECL(arti_speak, (struct obj *)); E void FDECL(arti_speak, (struct obj *));
E boolean FDECL(artifact_light, (struct obj *)); E boolean FDECL(artifact_light, (struct obj *));
E long FDECL(spec_m2, (struct obj *)); E long FDECL(spec_m2, (struct obj *));
E boolean FDECL(artifact_has_invprop, (struct obj *,UCHAR_P));
/* ### attrib.c ### */ /* ### attrib.c ### */

View File

@@ -1332,6 +1332,15 @@ void arti_speak(obj)
return; return;
} }
boolean
artifact_has_invprop(otmp, inv_prop)
struct obj *otmp;
uchar inv_prop;
{
const struct artifact *arti = get_artifact(otmp);
return((boolean)(arti && (arti->inv_prop == inv_prop)));
}
#endif /* OVLB */ #endif /* OVLB */

View File

@@ -711,8 +711,21 @@ dodown()
if (Levitation) { if (Levitation) {
if ((HLevitation & I_SPECIAL) || (ELevitation & W_ARTI)) { if ((HLevitation & I_SPECIAL) || (ELevitation & W_ARTI)) {
/* end controlled levitation */ /* end controlled levitation */
if (float_down(I_SPECIAL|TIMEOUT, W_ARTI)) if (ELevitation & W_ARTI) {
return (1); /* came down, so moved */ struct obj *obj;
for(obj = invent; obj; obj = obj->nobj) {
if (obj->oartifact &&
artifact_has_invprop(obj,LEVITATION)) {
if (obj->age < monstermoves)
obj->age = monstermoves + rnz(100);
else
obj->age += rnz(100);
}
}
}
if (float_down(I_SPECIAL|TIMEOUT, W_ARTI))
return (1); /* came down, so moved */
} }
floating_above(stairs_down ? "stairs" : ladder_down ? floating_above(stairs_down ? "stairs" : ladder_down ?
"ladder" : surface(u.ux, u.uy)); "ladder" : surface(u.ux, u.uy));