diff --git a/src/d_main.c b/src/d_main.c index e6568030e..ced90b261 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -1222,6 +1222,7 @@ boolean driftgaugegfx = false; // Driftgauge stuffs boolean multiitem_icon = false; // Extra icons for Sneakers, Banana and Jawz boolean joystickicon = false; // Extra icons for the joystick input display boolean minidoticon = false; // Dot graphic for minimap player angle display +boolean minilighticon = false; // mkwii-style minimap headlight // static void IdentifyVersion(void) @@ -1342,10 +1343,12 @@ static void D_CheckSaturnExtraFiles(void) CV_PossibleValue_t speedo_cons_temp[NUMSPEEDOSTUFF] = {{1, "Default"}, {0, NULL}, {0, NULL}, {0, NULL}, {0, NULL}, {0, NULL}, {0, NULL}, {0, NULL}}; CV_PossibleValue_t driftgaugestyle_cons_temp[NUMDGAUGESTUFF] = {{1, "Default"}, {2, "Small"}, {3, "Big Numbers"}, {4, "Numbers Only"}, {0, NULL}, {0, NULL}}; CV_PossibleValue_t inputdisplay_cons_temp[NUMINPUTDISPLAYSTUFF] = {{0, "Off"}, {1, "Wheel"}, {2, "Stick"}, {0, NULL}, {0, NULL}}; + CV_PossibleValue_t minimapdot_cons_temp[NUMMINIMAPDOTSTUFF] = {{0, "Off"}, {0, NULL}, {0, NULL}, {0, NULL}, {0, NULL}}; unsigned last_speedo_i = 0; unsigned last_driftgauge_i = 3; unsigned last_inputdisplay_i = 2; + unsigned last_minimapdot_i = 0; #define PUSHCONS(cons, i, id, name) { ++i; cons[i].value = id; cons[i].strvalue = name; } // found the funny, add it in! @@ -1438,6 +1441,13 @@ static void D_CheckSaturnExtraFiles(void) if (W_LumpExists("MMAPDOT")) { minidoticon = true; + PUSHCONS(minimapdot_cons_temp, last_minimapdot_i, 1, "Dot"); + } + + if (W_LumpExists("MMAPHDLT")) + { + minilighticon = true; + PUSHCONS(minimapdot_cons_temp, last_minimapdot_i, 2, "Headlight"); } } @@ -1513,6 +1523,7 @@ static void D_CheckSaturnExtraFiles(void) memcpy(speedo_cons_t, speedo_cons_temp, sizeof(speedo_cons_t)); memcpy(driftgaugestyle_cons_t, driftgaugestyle_cons_temp, sizeof(driftgaugestyle_cons_t)); memcpy(inputdisplay_cons_t, inputdisplay_cons_temp, sizeof(inputdisplay_cons_t)); + memcpy(minimapdot_cons_t, minimapdot_cons_temp, sizeof(minimapdot_cons_t)); } #include diff --git a/src/d_main.h b/src/d_main.h index f8e5b0b41..cb4049e54 100644 --- a/src/d_main.h +++ b/src/d_main.h @@ -53,6 +53,7 @@ extern boolean driftgaugegfx; // Driftgauge stuffs extern boolean multiitem_icon; // Extra icons for Sneakers, Banana and Jawz extern boolean joystickicon; // Extra icons for the joystick input display extern boolean minidoticon; // Dot icon for minimap player angle display +extern boolean minilighticon; // mkwii-style minimap headlight // // autoload stuff diff --git a/src/k_kart.c b/src/k_kart.c index fbe657006..0a15189a1 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -106,7 +106,8 @@ consvar_t cv_fancyroulette = {"animatedroulette", "Off", CV_SAVE, CV_OnOff, NULL consvar_t cv_minihead = {"smallminimapplayers", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_showminimapnames = {"showminimapnames", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_showminimapangle = {"showminimapangle", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +CV_PossibleValue_t minimapdot_cons_t[NUMMINIMAPDOTSTUFF]; +consvar_t cv_showminimapangle = {"showminimapangle", "Off", CV_SAVE, minimapdot_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_highresportrait = {"highresportrait", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; // make char potraits use their high-res version instead @@ -10587,7 +10588,7 @@ static void K_drawKartPlayerCheck(void) } } -static void K_drawKartMinimapIcon(fixed_t objx, fixed_t objy, INT32 hudx, INT32 hudy, INT32 flags, patch_t *icon, UINT8 *colormap) +static void K_drawKartMinimapIcon(fixed_t objx, fixed_t objy, INT32 hudx, INT32 hudy, INT32 flags, INT32 blend, patch_t *icon, UINT8 *colormap, drawinfo_t *dims, boolean scaleme) { // amnum xpos & ypos are the icon's speed around the HUD. // The number being divided by is for how fast it moves. @@ -10600,6 +10601,7 @@ static void K_drawKartMinimapIcon(fixed_t objx, fixed_t objy, INT32 hudx, INT32 INT32 amxpos, amypos; fixed_t scale = FRACUNIT; patch_t *AutomapPic; + INT16 w, h; AutomapPic = minimapinfo.minimap_pic; @@ -10614,17 +10616,28 @@ static void K_drawKartMinimapIcon(fixed_t objx, fixed_t objy, INT32 hudx, INT32 if (encoremode) amnumxpos = -amnumxpos; - amxpos = amnumxpos + ((hudx + (AutomapPic->width-icon->width)/2)<height-icon->height)/2)<x != 0) && (dims->y != 0)) { - amxpos += (icon->width / 4)<height / 4)<x; + h = dims->y; + } + else + { + w = icon->width; + h = icon->height; + } + + amxpos = amnumxpos + ((hudx + (AutomapPic->width-w)/2)<height-h)/2)<health <= 0 && players[localplayers[i]].pflags & PF_TIMEOVER) - continue; + boolean playertimedout = (mobj->health <= 0 && players[localplayers[i]].pflags & PF_TIMEOVER); - UINT8 *colormap; - fixed_t interpx, interpy; + if (cv_showminimapangle.value && (minidoticon || minilighticon) && !playertimedout) + { + UINT8 *colormap; + drawinfo_t dims; + fixed_t interpx, interpy; + fixed_t xoff = 0, yoff = 0; + blending = 0; - angle_t ang = R_InterpolateAngle(mobj->old_angle, mobj->angle); + angle_t ang = R_InterpolateAngle(mobj->old_angle, mobj->angle); - if (mobj->colorized) - colormap = R_GetTranslationColormap(TC_RAINBOW, mobj->color, GTC_CACHE); - else - colormap = R_GetLocalTranslationColormap(mobj->skin, mobj->localskin, mobj->color, GTC_CACHE, mobj->skinlocal); + if (mobj->colorized) + colormap = R_GetTranslationColormap(TC_RAINBOW, mobj->color, GTC_CACHE); + else + colormap = R_GetLocalTranslationColormap(mobj->skin, mobj->localskin, mobj->color, GTC_CACHE, mobj->skinlocal); - interpx = lerp(mobj->old_x, mobj->x); - interpy = lerp(mobj->old_y, mobj->y); + interpx = lerp(mobj->old_x, mobj->x); + interpy = lerp(mobj->old_y, mobj->y); - K_drawKartMinimapIcon( - interpx, - interpy, - x + FixedMul(FCOS(ang), icondotradius), - y - FixedMul(FSIN(ang), icondotradius), - splitflags, - kp_minimapdot, - colormap - ); + minipatch = kp_minimapdot; + + dims.x = 0; + dims.y = 0; + + if (cv_showminimapangle.value == MINIANGLE_DOT) + { + xoff = FixedMul(FCOS(ang), icondotradius); + yoff = -FixedMul(FSIN(ang), icondotradius); + } + else if (cv_showminimapangle.value == MINIANGLE_LIGHT) + { + rot = R_GetRollAngle(ang); + minipatch = W_CachePatchNameRotated("MMAPHDLT", rot, PU_PATCH); + + blending = B_ADD; + xoff = yoff = 0; + + dims.x = 48; + dims.y = 24; + } + + K_drawKartMinimapIcon( + interpx, + interpy, + x + xoff, + y + yoff, + splitflags, + blending, + minipatch, + colormap, + &dims, + false + ); + } + + // draw the minimap head after the nonsense above + K_drawKartMinimapHead(mobj, x, y, splitflags); } } diff --git a/src/k_kart.h b/src/k_kart.h index 8a53a2102..411bb0512 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -47,6 +47,9 @@ extern CV_PossibleValue_t speedo_cons_t[NUMSPEEDOSTUFF]; extern CV_PossibleValue_t driftgaugestyle_cons_t[NUMDGAUGESTUFF]; #define NUMINPUTDISPLAYSTUFF 5 extern CV_PossibleValue_t inputdisplay_cons_t[NUMINPUTDISPLAYSTUFF]; +#define NUMMINIMAPDOTSTUFF 5 +extern CV_PossibleValue_t minimapdot_cons_t[NUMMINIMAPDOTSTUFF]; + boolean K_IsPlayerLosing(player_t *player); boolean K_IsPlayerWanted(player_t *player); diff --git a/src/m_menu.c b/src/m_menu.c index b7e45afc3..63ad0c1e2 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -2453,7 +2453,7 @@ static menuitem_t OP_SaturnHudMenu[] = {IT_STRING | IT_CVAR, NULL, "Show Names on Minimap", &cv_showminimapnames, 135}, {IT_STRING | IT_CVAR, NULL, "Small Minimap Players", &cv_minihead, 140}, {IT_STRING | IT_CVAR, NULL, "Spin Minimap Icons", &cv_spinoutroll, 145}, - {IT_STRING | IT_CVAR, NULL, "Player Angle Dot", &cv_showminimapangle, 150}, + {IT_STRING | IT_CVAR, NULL, "Player Angle Visual", &cv_showminimapangle, 150}, {IT_STRING | IT_CVAR, NULL, "Beta Intermissionscreen", &cv_betainterscreen, 160}, @@ -2487,7 +2487,7 @@ static const char* OP_SaturnHudTooltips[] = "Show player names on the minimap.", "Minimize the player icons on the minimap.", "Erratically rotate player icons during spinouts.", - "Show a dot showing the player facing angle.", + "Visualize the player facing angle.", "Make the Intermission screen look like in beta versions of Kart!\nEither with background or just the rest.", "Show the Director Toggle prompt when spectating.", "Nametag Options.", @@ -4969,7 +4969,7 @@ void M_Init(void) if (!nametaggfx) OP_NametagMenu[nt_ntchar].status = IT_GRAYEDOUT; - if (!minidoticon) + if (!minidoticon && !minilighticon) OP_SaturnHudMenu[sh_minidot].status = IT_GRAYEDOUT; #ifndef NONET