commit 4788fd8387b4206df42a95c3c2f9b848bf4eac20
Author: Simon Howard <fraggle@gmail.com>
AuthorDate: Sat Mar 22 16:54:47 2014 -0400
Commit: Simon Howard <fraggle@gmail.com>
CommitDate: Sat Mar 22 16:54:47 2014 -0400
heretic/hexen: Fix automap background scrolling.
There was a bug where it was possible to keep moving the background
when the boundaries of the map were reached. This is because the code
to move the background was done in calls to AM_Drawer(), which is
fundamentally a bad idea. Some old commented-out code shows that this
was previously done in AM_Drawer (same location that scrolls the map
itself), but it was moved. Move it back.
Thanks to Chris Fielder for the bug report; this fixes #321.
---
src/heretic/am_map.c | 35 +++++++++++++++++++++++------------
src/hexen/am_map.c | 34 ++++++++++++++++++++++------------
2 files changed, 45 insertions(+), 24 deletions(-)
diff --git a/src/heretic/am_map.c b/src/heretic/am_map.c
index b753d96b..5454ba54 100644
--- a/src/heretic/am_map.c
+++ b/src/heretic/am_map.c
@@ -309,18 +309,23 @@ void AM_changeWindowLoc(void)
m_y = min_y - m_h / 2;
m_paninc.y = 0;
}
-/*
- mapxstart += MTOF(m_paninc.x+FRACUNIT/2);
- mapystart -= MTOF(m_paninc.y+FRACUNIT/2);
- if(mapxstart >= finit_width)
- mapxstart -= finit_width;
- if(mapxstart < 0)
- mapxstart += finit_width;
- if(mapystart >= finit_height)
- mapystart -= finit_height;
- if(mapystart < 0)
- mapystart += finit_height;
-*/
+
+ // The following code was commented out in the released Heretic source,
+ // but I believe we need to do this here to stop the background moving
+ // when we reach the map boundaries. (In the released source it's done
+ // in AM_clearFB).
+ mapxstart += MTOF(m_paninc.x+FRACUNIT/2);
+ mapystart -= MTOF(m_paninc.y+FRACUNIT/2);
+ if(mapxstart >= finit_width)
+ mapxstart -= finit_width;
+ if(mapxstart < 0)
+ mapxstart += finit_width;
+ if(mapystart >= finit_height)
+ mapystart -= finit_height;
+ if(mapystart < 0)
+ mapystart += finit_height;
+ // - end of code that was commented-out
+
m_x2 = m_x + m_w;
m_y2 = m_y + m_h;
}
@@ -783,8 +788,13 @@ void AM_clearFB(int color)
}
else
{
+ // The released Heretic source does this here, but this causes a bug
+ // where the map background keeps moving when we reach the map
+ // boundaries. This is instead done in AM_changeWindowLoc.
+ /*
mapxstart += (MTOF(m_paninc.x) >> 1);
mapystart -= (MTOF(m_paninc.y) >> 1);
+
if (mapxstart >= finit_width)
mapxstart -= finit_width;
if (mapxstart < 0)
@@ -793,6 +803,7 @@ void AM_clearFB(int color)
mapystart -= finit_height;
if (mapystart < 0)
mapystart += finit_height;
+ */
}
//blit the automap background to the screen.
diff --git a/src/hexen/am_map.c b/src/hexen/am_map.c
index 05d03d8f..465df9ba 100644
--- a/src/hexen/am_map.c
+++ b/src/hexen/am_map.c
@@ -255,18 +255,23 @@ void AM_changeWindowLoc(void)
m_y = min_y - m_h / 2;
m_paninc.y = 0;
}
-/*
- mapxstart += MTOF(m_paninc.x+FRACUNIT/2);
- mapystart -= MTOF(m_paninc.y+FRACUNIT/2);
- if(mapxstart >= finit_width)
- mapxstart -= finit_width;
- if(mapxstart < 0)
- mapxstart += finit_width;
- if(mapystart >= finit_height)
- mapystart -= finit_height;
- if(mapystart < 0)
- mapystart += finit_height;
-*/
+
+ // The following code was commented out in the released Hexen source,
+ // but I believe we need to do this here to stop the background moving
+ // when we reach the map boundaries. (In the released source it's done
+ // in AM_clearFB).
+ mapxstart += MTOF(m_paninc.x+FRACUNIT/2);
+ mapystart -= MTOF(m_paninc.y+FRACUNIT/2);
+ if(mapxstart >= finit_width)
+ mapxstart -= finit_width;
+ if(mapxstart < 0)
+ mapxstart += finit_width;
+ if(mapystart >= finit_height)
+ mapystart -= finit_height;
+ if(mapystart < 0)
+ mapystart += finit_height;
+ // - end of code that was commented-out
+
m_x2 = m_x + m_w;
m_y2 = m_y + m_h;
}
@@ -682,6 +687,10 @@ void AM_clearFB(int color)
}
else
{
+ // The released Hexen source does this here, but this causes a bug
+ // where the map background keeps moving when we reach the map
+ // boundaries. This is instead done in AM_changeWindowLoc.
+ /*
mapxstart += (MTOF(m_paninc.x) >> 1);
mapystart -= (MTOF(m_paninc.y) >> 1);
if (mapxstart >= finit_width)
@@ -692,6 +701,7 @@ void AM_clearFB(int color)
mapystart -= finit_height;
if (mapystart < 0)
mapystart += finit_height;
+ */
}
//blit the automap background to the screen.