automap overlay and rotate modes (based on Crispy Doom) (#216)

* add automap overlay mode

* add automap rotate mode

* add zoom automap with mouse wheel

* remove automaprotate toggle

* set mapangle in AM_Ticker

* initialize zoomlevel on all maps so that a 4096 units
square map would just fit in (from Crispy Doom)

* revert 320->SCREENWITDH change

* change STlib_updatePercent 'refresh' check

* cleanup and add comment

* move map title position calculation to the next block
This commit is contained in:
Roman Fomin 2021-06-08 13:26:40 +07:00 committed by GitHub
parent 107f6f6e52
commit 68fed677ac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 326 additions and 38 deletions

View File

@ -86,6 +86,8 @@ extern int key_map_clear; // |
extern int key_map_grid; // phares
// [FG] automap joystick button
extern int joybautomap;
extern int key_map_overlay;
extern int key_map_rotate;
// scale on entry
#define INITSCALEMTOF (int)(.2*FRACUNIT)
@ -99,6 +101,10 @@ extern int joybautomap;
// pulls out to 0.5x in 1 second
#define M_ZOOMOUT ((int) (FRACUNIT/1.02))
// [crispy] zoom faster with the mouse wheel
#define M2_ZOOMIN ((int) (1.08*FRACUNIT))
#define M2_ZOOMOUT ((int) (FRACUNIT/1.08))
// translates between frame-buffer and map distances
// [FG] fix int overflow that causes map and grid lines to disappear
#define FTOM(x) ((((int64_t)(x)<<16)*scale_ftom)>>16)
@ -220,6 +226,8 @@ int automap_grid = 0;
boolean automapactive = false;
boolean automapoverlay = false;
// location of window on screen
static int f_x;
static int f_y;
@ -288,6 +296,17 @@ int followplayer = 1; // specifies whether to follow the player around
static boolean stopped = true;
// [crispy] automap rotate mode needs these early on
boolean automaprotate = false;
void AM_rotate(int64_t *x, int64_t *y, angle_t a);
static void AM_rotatePoint(mpoint_t *pt);
static mpoint_t mapcenter;
static angle_t mapangle;
// [FG] prev/next weapon keys and buttons
extern int mousebprevweapon;
extern int mousebnextweapon;
//
// AM_getIslope()
//
@ -457,14 +476,22 @@ void AM_findMinMaxBoundaries(void)
//
void AM_changeWindowLoc(void)
{
int64_t incx, incy;
if (m_paninc.x || m_paninc.y)
{
followplayer = 0;
f_oldloc.x = D_MAXINT;
}
m_x += m_paninc.x;
m_y += m_paninc.y;
incx = m_paninc.x;
incy = m_paninc.y;
if (automaprotate)
{
AM_rotate(&incx, &incy, -mapangle);
}
m_x += incx;
m_y += incy;
if (m_x + m_w/2 > max_x)
m_x = max_x - m_w/2;
@ -600,7 +627,15 @@ void AM_LevelInit(void)
f_h = (SCREENHEIGHT-ST_HEIGHT) << hires;
AM_findMinMaxBoundaries();
scale_mtof = FixedDiv(min_scale_mtof, (int) (0.7*FRACUNIT));
// [crispy] initialize zoomlevel on all maps so that a 4096 units
// square map would just fit in (MAP01 is 3376x3648 units)
{
fixed_t a = FixedDiv(f_w, (max_w>>FRACBITS < 2048) ? 2*(max_w>>FRACBITS) : 4096);
fixed_t b = FixedDiv(f_h, (max_h>>FRACBITS < 2048) ? 2*(max_h>>FRACBITS) : 4096);
scale_mtof = FixedDiv(a < b ? a : b, (int) (0.7*FRACUNIT));
}
if (scale_mtof > max_scale_mtof)
scale_mtof = min_scale_mtof;
scale_ftom = FixedDiv(FRACUNIT, scale_mtof);
@ -720,6 +755,23 @@ boolean AM_Responder
rc = true;
}
}
// [crispy] zoom automap with the mouse (wheel)
else if (ev->type == ev_mouse && !menuactive)
{
if (mousebprevweapon >= 0 && ev->data1 & (1 << mousebprevweapon))
{
mtof_zoommul = M2_ZOOMOUT;
ftom_zoommul = M2_ZOOMIN;
rc = true;
}
else
if (mousebnextweapon >= 0 && ev->data1 & (1 << mousebnextweapon))
{
mtof_zoommul = M2_ZOOMIN;
ftom_zoommul = M2_ZOOMOUT;
rc = true;
}
}
else if (ev->type == ev_keydown)
{
rc = true;
@ -797,6 +849,23 @@ boolean AM_Responder
plr->message = s_AMSTR_MARKSCLEARED; // ^
} // |
else // phares
if (ch == key_map_overlay)
{
automapoverlay = !automapoverlay;
if (automapoverlay)
plr->message = s_AMSTR_OVERLAYON;
else
plr->message = s_AMSTR_OVERLAYOFF;
}
else if (ch == key_map_rotate)
{
automaprotate = !automaprotate;
if (automaprotate)
plr->message = s_AMSTR_ROTATEON;
else
plr->message = s_AMSTR_ROTATEOFF;
}
else
{
rc = false;
}
@ -847,6 +916,13 @@ void AM_changeWindowScale(void)
scale_mtof = FixedMul(scale_mtof, mtof_zoommul);
scale_ftom = FixedDiv(FRACUNIT, scale_mtof);
// [crispy] reset after zooming with the mouse wheel
if (ftom_zoommul == M2_ZOOMIN || ftom_zoommul == M2_ZOOMOUT)
{
mtof_zoommul = FRACUNIT;
ftom_zoommul = FRACUNIT;
}
if (scale_mtof < min_scale_mtof)
AM_minOutWindowScale();
else if (scale_mtof > max_scale_mtof)
@ -911,7 +987,17 @@ void AM_Ticker (void)
// Change x,y location
if (m_paninc.x || m_paninc.y)
{
AM_changeWindowLoc();
}
// [crispy] required for AM_rotatePoint()
if (automaprotate)
{
mapcenter.x = m_x + m_w / 2;
mapcenter.y = m_y + m_h / 2;
mapangle = ANG90 - viewangle;
}
}
@ -1191,35 +1277,67 @@ void AM_drawGrid(int color)
// Figure out start of vertical gridlines
start = m_x;
if (automaprotate)
{
start -= m_h / 2;
}
if ((start-bmaporgx)%(MAPBLOCKUNITS<<FRACBITS))
start += (MAPBLOCKUNITS<<FRACBITS)
- ((start-bmaporgx)%(MAPBLOCKUNITS<<FRACBITS));
end = m_x + m_w;
if (automaprotate)
{
end += m_h / 2;
}
// draw vertical gridlines
ml.a.y = m_y;
ml.b.y = m_y+m_h;
for (x=start; x<end; x+=(MAPBLOCKUNITS<<FRACBITS))
{
ml.a.x = x;
ml.b.x = x;
// [crispy] moved here
ml.a.y = m_y;
ml.b.y = m_y+m_h;
if (automaprotate)
{
ml.a.y -= m_w / 2;
ml.b.y += m_w / 2;
AM_rotatePoint(&ml.a);
AM_rotatePoint(&ml.b);
}
AM_drawMline(&ml, color);
}
// Figure out start of horizontal gridlines
start = m_y;
if (automaprotate)
{
start -= m_w / 2;
}
if ((start-bmaporgy)%(MAPBLOCKUNITS<<FRACBITS))
start += (MAPBLOCKUNITS<<FRACBITS)
- ((start-bmaporgy)%(MAPBLOCKUNITS<<FRACBITS));
end = m_y + m_h;
if (automaprotate)
{
end += m_w / 2;
}
// draw horizontal gridlines
ml.a.x = m_x;
ml.b.x = m_x + m_w;
for (y=start; y<end; y+=(MAPBLOCKUNITS<<FRACBITS))
{
ml.a.y = y;
ml.b.y = y;
// [crispy] moved here
ml.a.x = m_x;
ml.b.x = m_x + m_w;
if (automaprotate)
{
ml.a.x -= m_h / 2;
ml.b.x += m_h / 2;
AM_rotatePoint(&ml.a);
AM_rotatePoint(&ml.b);
}
AM_drawMline(&ml, color);
}
}
@ -1293,6 +1411,11 @@ void AM_drawWalls(void)
l.a.y = lines[i].v1->y;
l.b.x = lines[i].v2->x;
l.b.y = lines[i].v2->y;
if (automaprotate)
{
AM_rotatePoint(&l.a);
AM_rotatePoint(&l.b);
}
// if line has been seen or IDDT has been used
if (ddt_cheating || (lines[i].flags & ML_MAPPED))
{
@ -1498,6 +1621,27 @@ void AM_rotate
*x = tmpx;
}
// [crispy] rotate point around map center
// adapted from prboom-plus/src/am_map.c:898-920
static void AM_rotatePoint(mpoint_t *pt)
{
int64_t tmpx;
const angle_t actualangle = ANG90 - viewangle;
pt->x -= mapcenter.x;
pt->y -= mapcenter.y;
tmpx = (int64_t)FixedMul(pt->x, finecosine[actualangle>>ANGLETOFINESHIFT])
- (int64_t)FixedMul(pt->y, finesine[actualangle>>ANGLETOFINESHIFT])
+ mapcenter.x;
pt->y = (int64_t)FixedMul(pt->x, finesine[actualangle>>ANGLETOFINESHIFT])
+ (int64_t)FixedMul(pt->y, finecosine[actualangle>>ANGLETOFINESHIFT])
+ mapcenter.y;
pt->x = tmpx;
}
//
// AM_drawLineCharacter()
//
@ -1520,6 +1664,11 @@ void AM_drawLineCharacter
int i;
mline_t l;
if (automaprotate)
{
angle += mapangle;
}
for (i=0;i<lineguylines;i++)
{
l.a.x = lineguy[i].a.x;
@ -1571,9 +1720,17 @@ void AM_drawPlayers(void)
//jff 1/6/98 static int their_colors[] = { GREENS, GRAYS, BROWNS, REDS };
int their_color = -1;
int color;
mpoint_t pt;
if (!netgame)
{
pt.x = plr->mo->x;
pt.y = plr->mo->y;
if (automaprotate)
{
AM_rotatePoint(&pt);
}
if (ddt_cheating)
AM_drawLineCharacter
(
@ -1582,8 +1739,8 @@ void AM_drawPlayers(void)
0,
plr->mo->angle,
mapcolor_sngl, //jff color
plr->mo->x,
plr->mo->y
pt.x,
pt.y
);
else
AM_drawLineCharacter
@ -1593,8 +1750,8 @@ void AM_drawPlayers(void)
0,
plr->mo->angle,
mapcolor_sngl, //jff color
plr->mo->x,
plr->mo->y);
pt.x,
pt.y);
return;
}
@ -1603,6 +1760,13 @@ void AM_drawPlayers(void)
their_color++;
p = &players[i];
pt.x = p->mo->x;
pt.y = p->mo->y;
if (automaprotate)
{
AM_rotatePoint(&pt);
}
// killough 9/29/98: use !demoplayback so internal demos are no different
if ( (deathmatch && !demoplayback) && p != plr)
continue;
@ -1622,8 +1786,8 @@ void AM_drawPlayers(void)
0,
p->mo->angle,
color,
p->mo->x,
p->mo->y
pt.x,
pt.y
);
}
}
@ -1642,6 +1806,7 @@ void AM_drawThings
{
int i;
mobj_t* t;
mpoint_t pt;
// for all sectors
for (i=0;i<numsectors;i++)
@ -1649,6 +1814,20 @@ void AM_drawThings
t = sectors[i].thinglist;
while (t) // for all things in that sector
{
// [crispy] do not draw an extra triangle for the player
if (t == plr->mo)
{
t = t->snext;
continue;
}
pt.x = t->x;
pt.y = t->y;
if (automaprotate)
{
AM_rotatePoint(&pt);
}
//jff 1/5/98 case over doomednum of thing being drawn
if (mapcolor_rkey || mapcolor_ykey || mapcolor_bkey)
{
@ -1663,8 +1842,8 @@ void AM_drawThings
16<<FRACBITS,
t->angle,
mapcolor_rkey!=-1? mapcolor_rkey : mapcolor_sprt,
t->x,
t->y
pt.x,
pt.y
);
t = t->snext;
continue;
@ -1676,8 +1855,8 @@ void AM_drawThings
16<<FRACBITS,
t->angle,
mapcolor_ykey!=-1? mapcolor_ykey : mapcolor_sprt,
t->x,
t->y
pt.x,
pt.y
);
t = t->snext;
continue;
@ -1689,8 +1868,8 @@ void AM_drawThings
16<<FRACBITS,
t->angle,
mapcolor_bkey!=-1? mapcolor_bkey : mapcolor_sprt,
t->x,
t->y
pt.x,
pt.y
);
t = t->snext;
continue;
@ -1731,19 +1910,31 @@ void AM_drawThings
void AM_drawMarks(void)
{
int i;
mpoint_t pt;
for (i=0;i<markpointnum;i++) // killough 2/22/98: remove automap mark limit
if (markpoints[i].x != -1)
{
int w = 5 << hires;
int h = 6 << hires;
int fx = CXMTOF(markpoints[i].x);
int fy = CYMTOF(markpoints[i].y);
int fx;
int fy;
int j = i;
do
{
int d = j % 10;
// [crispy] center marks around player
pt.x = markpoints[i].x;
pt.y = markpoints[i].y;
if (automaprotate)
{
AM_rotatePoint(&pt);
}
fx = CXMTOF(pt.x);
fy = CYMTOF(pt.y);
if (d==1) // killough 2/22/98: less spacing for '1'
fx += 1<<hires;
@ -1782,6 +1973,7 @@ void AM_Drawer (void)
{
if (!automapactive) return;
if (!automapoverlay)
AM_clearFB(mapcolor_back); //jff 1/5/98 background default color
if (automap_grid) // killough 2/28/98: change var name
AM_drawGrid(mapcolor_grid); //jff 1/7/98 grid default color

View File

@ -346,6 +346,10 @@ char *s_AMSTR_GRIDON = AMSTR_GRIDON;
char *s_AMSTR_GRIDOFF = AMSTR_GRIDOFF;
char *s_AMSTR_MARKEDSPOT = AMSTR_MARKEDSPOT;
char *s_AMSTR_MARKSCLEARED = AMSTR_MARKSCLEARED;
char *s_AMSTR_OVERLAYON = AMSTR_OVERLAYON;
char *s_AMSTR_OVERLAYOFF = AMSTR_OVERLAYOFF;
char *s_AMSTR_ROTATEON = AMSTR_ROTATEON;
char *s_AMSTR_ROTATEOFF = AMSTR_ROTATEOFF;
char *s_STSTR_MUS = STSTR_MUS;
char *s_STSTR_NOMUS = STSTR_NOMUS;
char *s_STSTR_DQDON = STSTR_DQDON;
@ -680,6 +684,10 @@ deh_strs deh_strlookup[] = {
{&s_AMSTR_GRIDOFF,"AMSTR_GRIDOFF"},
{&s_AMSTR_MARKEDSPOT,"AMSTR_MARKEDSPOT"},
{&s_AMSTR_MARKSCLEARED,"AMSTR_MARKSCLEARED"},
{&s_AMSTR_OVERLAYON,"AMSTR_OVERLAYON"},
{&s_AMSTR_OVERLAYOFF,"AMSTR_FOLLOWOFF"},
{&s_AMSTR_ROTATEON,"AMSTR_ROTATEON"},
{&s_AMSTR_ROTATEOFF,"AMSTR_ROTATEOFF"},
{&s_STSTR_MUS,"STSTR_MUS"},
{&s_STSTR_NOMUS,"STSTR_NOMUS"},
{&s_STSTR_DQDON,"STSTR_DQDON"},

View File

@ -599,6 +599,12 @@ extern char *s_AMSTR_MARKEDSPOT; // = AMSTR_MARKEDSPOT;
//#define AMSTR_MARKSCLEARED "All Marks Cleared"
extern char *s_AMSTR_MARKSCLEARED; // = AMSTR_MARKSCLEARED;
extern char *s_AMSTR_OVERLAYON;
extern char *s_AMSTR_OVERLAYOFF;
extern char *s_AMSTR_ROTATEON;
extern char *s_AMSTR_ROTATEOFF;
//
// ST_stuff.C
//

View File

@ -355,6 +355,12 @@
#define AMSTR_MARKEDSPOT "Marked Spot"
#define AMSTR_MARKSCLEARED "All Marks Cleared"
#define AMSTR_OVERLAYON "Overlay Mode ON"
#define AMSTR_OVERLAYOFF "Overlay Mode OFF"
#define AMSTR_ROTATEON "Rotate Mode ON"
#define AMSTR_ROTATEOFF "Rotate Mode OFF"
//
// ST_stuff.C
//

View File

@ -255,6 +255,12 @@
#define AMSTR_MARKEDSPOT "REPERE MARQUE "
#define AMSTR_MARKSCLEARED "REPERES EFFACES "
#define AMSTR_OVERLAYON "MODE SUPERPOSTION ON"
#define AMSTR_OVERLAYOFF "MODE SUPERPOSTION OFF"
#define AMSTR_ROTATEON "MODE ROTATION ON"
#define AMSTR_ROTATEOFF "MODE ROTATION OFF"
//
// ST_stuff.C
//

View File

@ -279,7 +279,7 @@ void D_Display (void)
}
// see if the border needs to be updated to the screen
if (gamestate == GS_LEVEL && !automapactive && scaledviewwidth != 320)
if (gamestate == GS_LEVEL && (!automapactive || automapoverlay) && scaledviewwidth != 320)
{
if (menuactive || menuactivestate || !viewactivestate)
borderdrawcount = 3;
@ -295,6 +295,16 @@ void D_Display (void)
inhelpscreensstate = inhelpscreens;
oldgamestate = wipegamestate = gamestate;
if (automapactive && automapoverlay)
{
AM_Drawer();
HU_Drawer();
// [crispy] force redraw of status bar and border
viewactivestate = false;
inhelpscreensstate = true;
}
// draw pause pic
if (paused)
{

View File

@ -198,6 +198,8 @@ extern int snd_DesiredSfxDevice;
extern boolean statusbaractive;
extern boolean automapactive; // In AutoMap mode?
extern boolean automapoverlay;
extern boolean automaprotate;
extern boolean menuactive; // Menu overlayed?
extern boolean paused; // Game Pause?
extern boolean viewactive;

View File

@ -167,6 +167,8 @@ int key_map_follow;
int key_map_mark;
int key_map_clear;
int key_map_grid;
int key_map_overlay;
int key_map_rotate;
int key_help = KEYD_F1; // phares 4/13/98
int key_soundvolume;
int key_hud;

View File

@ -148,6 +148,8 @@ extern int key_map_follow;
extern int key_map_mark; // ^
extern int key_map_clear; // |
extern int key_map_grid; // phares
extern int key_map_overlay;
extern int key_map_rotate;
extern int key_screenshot; // killough 2/22/98 -- add key for screenshot
extern int key_setup; // killough 10/98: shortcut to setup menu
extern int autorun; // always running? // phares

View File

@ -753,13 +753,16 @@ void HU_Drawer(void)
plr = &players[displayplayer]; // killough 3/7/98
// draw the automap widgets if automap is displayed
if (automapactive)
if (automapactive && !(hud_distributed && automapoverlay))
{
fixed_t x,y,z; // killough 10/98:
void AM_Coordinates(const mobj_t *, fixed_t *, fixed_t *, fixed_t *);
if (!(hud_displayed && automapoverlay))
{
// map title
HUlib_drawTextLine(&w_title, false);
}
// [FG] draw player coords widget
if (map_player_coords)
@ -831,7 +834,7 @@ void HU_Drawer(void)
hud_active>0 && // hud optioned on
hud_displayed && // hud on from fullscreen key
scaledviewheight==SCREENHEIGHT &&// fullscreen mode is active
!automapactive // automap is not active
(!automapactive || automapoverlay)
)
{
HU_MoveHud(); // insure HUD display coords are correct
@ -1440,6 +1443,12 @@ void HU_Ticker(void)
{
char *s;
// [crispy] move map title to the bottom
if (automapoverlay && screenblocks >= 11)
w_title.y = HU_TITLEY + ST_HEIGHT;
else
w_title.y = HU_TITLEY;
if (map_level_stats)
{
sprintf(hud_lstatk, "K: %d/%d", plr->killcount, totalkills);

View File

@ -2591,12 +2591,13 @@ static int G_GotoNextLevel(void)
#define X_BUTTON 301
#define Y_BUTTON 3
// Definitions of the (in this case) four key binding screens.
// Definitions of the (in this case) five key binding screens.
setup_menu_t keys_settings1[];
setup_menu_t keys_settings2[];
setup_menu_t keys_settings3[];
setup_menu_t keys_settings4[];
setup_menu_t keys_settings5[];
// The table which gets you from one screen table to the next.
@ -2606,6 +2607,7 @@ setup_menu_t* keys_settings[] =
keys_settings2,
keys_settings3,
keys_settings4,
keys_settings5,
NULL
};
@ -2768,17 +2770,30 @@ setup_menu_t keys_settings4[] = // Key Binding screen strings
{"CLEAR MARKS",S_KEY ,m_map ,KB_X,KB_Y+ 9*8,{&key_map_clear}},
{"FULL/ZOOM" ,S_KEY ,m_map ,KB_X,KB_Y+10*8,{&key_map_gobig}},
{"GRID" ,S_KEY ,m_map ,KB_X,KB_Y+11*8,{&key_map_grid}},
{"CHATTING" ,S_SKIP|S_TITLE,m_null,KB_X,KB_Y+12*8},
{"BEGIN CHAT" ,S_KEY ,m_scrn,KB_X,KB_Y+13*8,{&key_chat}},
{"PLAYER 1" ,S_KEY ,m_scrn,KB_X,KB_Y+14*8,{&destination_keys[0]}},
{"PLAYER 2" ,S_KEY ,m_scrn,KB_X,KB_Y+15*8,{&destination_keys[1]}},
{"PLAYER 3" ,S_KEY ,m_scrn,KB_X,KB_Y+16*8,{&destination_keys[2]}},
{"PLAYER 4" ,S_KEY ,m_scrn,KB_X,KB_Y+17*8,{&destination_keys[3]}},
{"BACKSPACE" ,S_KEY ,m_scrn,KB_X,KB_Y+18*8,{&key_backspace}},
{"ENTER" ,S_KEY ,m_scrn,KB_X,KB_Y+19*8,{&key_enter}},
{"OVERLAY" ,S_KEY ,m_map ,KB_X,KB_Y+12*8,{&key_map_overlay}},
{"ROTATE" ,S_KEY ,m_map ,KB_X,KB_Y+13*8,{&key_map_rotate}},
{"<- PREV" ,S_SKIP|S_PREV,m_null,KB_PREV,KB_Y+20*8, {keys_settings3}},
{"NEXT ->",S_SKIP|S_NEXT,m_null,KB_NEXT,KB_Y+20*8, {keys_settings5}},
// Final entry
{0,S_SKIP|S_END,m_null}
};
setup_menu_t keys_settings5[] =
{
{"CHATTING" ,S_SKIP|S_TITLE,m_null,KB_X,KB_Y},
{"BEGIN CHAT" ,S_KEY ,m_scrn,KB_X,KB_Y+1*8,{&key_chat}},
{"PLAYER 1" ,S_KEY ,m_scrn,KB_X,KB_Y+2*8,{&destination_keys[0]}},
{"PLAYER 2" ,S_KEY ,m_scrn,KB_X,KB_Y+3*8,{&destination_keys[1]}},
{"PLAYER 3" ,S_KEY ,m_scrn,KB_X,KB_Y+4*8,{&destination_keys[2]}},
{"PLAYER 4" ,S_KEY ,m_scrn,KB_X,KB_Y+5*8,{&destination_keys[3]}},
{"BACKSPACE" ,S_KEY ,m_scrn,KB_X,KB_Y+6*8,{&key_backspace}},
{"ENTER" ,S_KEY ,m_scrn,KB_X,KB_Y+7*8,{&key_enter}},
{"<- PREV" ,S_SKIP|S_PREV,m_null,KB_PREV,KB_Y+20*8, {keys_settings4}},
// Final entry

View File

@ -937,6 +937,20 @@ default_t defaults[] = {
"key to toggle grid display over automap"
},
{
"key_map_overlay",
(config_t *) &key_map_overlay, NULL,
{'o'}, {0,255}, number, ss_keys, wad_no,
"key to toggle overlay mode"
},
{
"key_map_rotate",
(config_t *) &key_map_rotate, NULL,
{'r'}, {0,255}, number, ss_keys, wad_no,
"key to toggle rotate mode"
},
{
"key_reverse",
(config_t *) &key_reverse, NULL,
@ -1548,6 +1562,20 @@ default_t defaults[] = {
"1 to show level time widget"
},
{
"automapoverlay",
(config_t *) &automapoverlay, NULL,
{0}, {0,1}, number, ss_auto, wad_no,
"1 to enable automap overlay mode"
},
{
"automaprotate",
(config_t *) &automaprotate, NULL,
{0}, {0,1}, number, ss_auto, wad_no,
"1 to enable automap rotate mode"
},
//jff 1/7/98 end additions for automap
//jff 2/16/98 defaults for color ranges in hud and status

View File

@ -694,7 +694,7 @@ void R_RenderPlayerView (player_t* player)
R_RenderBSPNode (numnodes-1);
// [FG] update automap while playing
if (automapactive)
if (automapactive && !automapoverlay)
return;
// Check for new console commands.

View File

@ -396,7 +396,7 @@ void R_StoreWallRange(const int start, const int stop)
linedef->flags |= ML_MAPPED;
// [FG] update automap while playing
if (automapactive)
if (automapactive && !automapoverlay)
return;
// calculate rw_distance for scale calculation

View File

@ -221,7 +221,9 @@ void STlib_updatePercent
char *outrng, //jff 2/16/98 add color translation to digit output
int refresh )
{
if (refresh || *per->n.on) // killough 2/21/98: fix percents not updated;
// Remove the check for 'refresh' because this causes percent symbols to always appear
// in automap overlay mode.
if (*per->n.on) // killough 2/21/98: fix percents not updated;
{
if (!sts_always_red) // also support gray-only percents
V_DrawPatchTranslated

View File

@ -838,7 +838,7 @@ void ST_diffDraw(void)
void ST_Drawer(boolean fullscreen, boolean refresh)
{
st_statusbaron = !fullscreen || automapactive;
st_statusbaron = !fullscreen || (automapactive && !automapoverlay);
st_firsttime = st_firsttime || refresh;
ST_doPaletteStuff(); // Do red-/gold-shifts from damage/items