diff --git a/src/m_menu.c b/src/m_menu.c index e0c240fecc773d2ef9f0931205f05a02315a74c2..38165472e53459d93dc3f3cffa2a81ecce2d9de7 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -10211,9 +10211,12 @@ void M_DrawNightsAttackMenu(void) color = skins[skinnumber]->prefcolor; angle_t fa = (FixedAngle(((FixedInt(ntsatkdrawtimer * 4)) % 360)<<FRACBITS)>>ANGLETOFINESHIFT) & FINEMASK; + fixed_t scale = skins[skinnumber]->highresscale; + if (skins[skinnumber]->shieldscale) + scale = FixedDiv(scale, skins[skinnumber]->shieldscale); V_DrawFixedPatch(270<<FRACBITS, (186<<FRACBITS) - 8*FINESINE(fa), - FixedDiv(skins[skinnumber]->highresscale, skins[skinnumber]->shieldscale), + scale, (sprframe->flip & 1<<6) ? V_FLIP : 0, natksprite, R_GetTranslationColormap(TC_BLINK, color, GTC_CACHE)); @@ -12300,7 +12303,9 @@ static void M_DrawSetupMultiPlayerMenu(void) if (multi_frame >= sprdef->numframes) multi_frame = 0; - scale = FixedDiv(skins[setupm_fakeskin]->highresscale, skins[setupm_fakeskin]->shieldscale); + scale = skins[setupm_fakeskin]->highresscale; + if (skins[setupm_fakeskin]->shieldscale) + scale = FixedDiv(scale, skins[setupm_fakeskin]->shieldscale); #define chary (y+64) @@ -12333,7 +12338,7 @@ static void M_DrawSetupMultiPlayerMenu(void) V_DrawFixedPatch( x<<FRACBITS, chary<<FRACBITS, - FixedDiv(skins[setupm_fakeskin]->highresscale, skins[setupm_fakeskin]->shieldscale), + scale, flags, patch, colormap); goto colordraw; diff --git a/src/p_mobj.c b/src/p_mobj.c index fbbae5a1e4b5cb122ff353591b037a91f284ceef..4716042e331fa6a0ec3e4ea1fc7035dbebb87c11 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -6662,8 +6662,21 @@ static boolean P_ShieldLook(mobj_t *thing, shieldtype_t shield) thing->flags |= MF_NOCLIPHEIGHT; thing->eflags = (thing->eflags & ~MFE_VERTICALFLIP)|(thing->target->eflags & MFE_VERTICALFLIP); - P_SetScale(thing, FixedMul(thing->target->scale, thing->target->player->shieldscale), true); - thing->old_scale = FixedMul(thing->target->old_scale, thing->target->player->shieldscale); + //Set the shield's scale based on shieldscale, hide it if we're too small! + fixed_t scale = FixedMul(thing->target->scale, thing->target->player->shieldscale); + if (scale < 1) { + P_SetScale(thing, thing->target->scale, true); + thing->old_scale = thing->target->old_scale; + + thing->flags2 |= (MF2_DONTDRAW|MF2_JUSTATTACKED); //Hide and indicate we're hidden + } else { + P_SetScale(thing, scale, true); + thing->old_scale = FixedMul(thing->target->old_scale, thing->target->player->shieldscale); + + //Only unhide if we were hidden by the above code + if (thing->flags2 & MF2_JUSTATTACKED) + thing->flags2 &= ~(MF2_DONTDRAW|MF2_JUSTATTACKED); + } #define NewMH(mobj) mobj->height // Ugly mobj-height and player-height defines, for the sake of prettier code #define NewPH(player) P_GetPlayerHeight(player) diff --git a/src/r_things.c b/src/r_things.c index fb9757a9ae077703433b2ad4bc8a3a1fc166d12b..dc9cab99770817e5f05c6d13a281f3fa37668790 100644 --- a/src/r_things.c +++ b/src/r_things.c @@ -1774,6 +1774,10 @@ static void R_ProjectSprite(mobj_t *thing) } this_scale = interp.scale; + + if (this_scale < 1) + return; + radius = interp.radius; // For drop shadows height = interp.height; // Ditto