diff --git a/src/am_map.c b/src/am_map.c index 4ad40b7aa6dae765c564ff7caac338f216e9f32d..6cd9a3f0f15b2e8c9d4eda4663b2c5247500124c 100644 --- a/src/am_map.c +++ b/src/am_map.c @@ -346,15 +346,21 @@ static void AM_initVariables(void) } // -// should be called at the start of every level -// right now, i figure it out myself +// Called when the screen size changed. // -static void AM_LevelInit(void) +static void AM_FrameBufferInit(void) { f_x = f_y = 0; f_w = vid.width; f_h = vid.height; +} +// +// should be called at the start of every level +// right now, i figure it out myself +// +static void AM_LevelInit(void) +{ AM_findMinMaxBoundaries(); scale_mtof = FixedDiv(min_scale_mtof*10, 7*FRACUNIT); if (scale_mtof > max_scale_mtof) @@ -376,7 +382,7 @@ void AM_Stop(void) * * \sa AM_Stop */ -static inline void AM_Start(void) +void AM_Start(void) { static INT32 lastlevel = -1; @@ -385,8 +391,12 @@ static inline void AM_Start(void) am_stopped = false; if (lastlevel != gamemap || am_recalc) // screen size changed { - AM_LevelInit(); - lastlevel = gamemap; + AM_FrameBufferInit(); + if (lastlevel != gamemap) + { + AM_LevelInit(); + lastlevel = gamemap; + } am_recalc = false; } AM_initVariables(); diff --git a/src/am_map.h b/src/am_map.h index 462bb3d6d7b0adf15140f55705fbb76642725089..0560207bb41821f7ce09eb14d63ee3a62dfcfb97 100644 --- a/src/am_map.h +++ b/src/am_map.h @@ -38,6 +38,9 @@ void AM_Ticker(void); // Called by main loop, instead of view drawer if automap is active. void AM_Drawer(void); +// Enables the automap. +void AM_Start(void); + // Called to force the automap to quit if the level is completed while it is up. void AM_Stop(void); diff --git a/src/screen.c b/src/screen.c index 5bb304c0844708545d18a18b4d8e0335e61faf74..fcf6c6b0bdf6f417964a58817fae9af208edb240 100644 --- a/src/screen.c +++ b/src/screen.c @@ -360,10 +360,13 @@ void SCR_Recalc(void) vid.fsmalldupy = vid.smalldupy*FRACUNIT; #endif - // toggle off automap because some screensize-dependent values will + // toggle off (then back on) the automap because some screensize-dependent values will // be calculated next time the automap is activated. if (automapactive) - AM_Stop(); + { + am_recalc = true; + AM_Start(); + } // set the screen[x] ptrs on the new vidbuffers V_Init();