Flip timed effects

In wizard mode, freezing some water on the ground, then
flipping the level did not flip the coordinate of the ice
thawing timed effect. This could cause an impossible complaint.
This commit is contained in:
Pasi Kallinen
2020-03-14 11:28:32 +02:00
parent 961b2a11ff
commit 55bfc8115a
+14
View File
@@ -447,6 +447,7 @@ boolean extras;
struct monst *mtmp; struct monst *mtmp;
struct engr *etmp; struct engr *etmp;
struct mkroom *sroom; struct mkroom *sroom;
timer_element *timer;
get_level_extends(&minx, &miny, &maxx, &maxy); get_level_extends(&minx, &miny, &maxx, &maxy);
/* get_level_extends() returns -1,-1 to COLNO,ROWNO at max */ /* get_level_extends() returns -1,-1 to COLNO,ROWNO at max */
@@ -712,6 +713,19 @@ boolean extras;
} }
} }
/* timed effects */
for (timer = g.timer_base; timer; timer = timer->next) {
if (timer->func_index == MELT_ICE_AWAY) {
long ty = ((long)timer->arg.a_void) & 0xFFFF;
long tx = (((long)timer->arg.a_void) >> 16) & 0xFFFF;
if (flp & 1)
ty = FlipY(ty);
if (flp & 2)
tx = FlipX(tx);
timer->arg.a_void = (genericptr_t)((tx << 16) | ty);
}
}
if (extras) { if (extras) {
/* flip hero location only if inside the flippable area */ /* flip hero location only if inside the flippable area */
if (!(u.ux < minx || u.ux > maxx || u.uy < miny || u.uy > maxy)) { if (!(u.ux < minx || u.ux > maxx || u.uy < miny || u.uy > maxy)) {