diff --git a/src/p_map.cpp b/src/p_map.cpp index 33f69f201..13e31fed2 100644 --- a/src/p_map.cpp +++ b/src/p_map.cpp @@ -6246,7 +6246,7 @@ void P_CreateSecNodeList(AActor *thing) void AActor::UpdateRenderSectorList() { static const double SPRITE_SPACE = 64.; - if (Pos() != OldRenderPos) + if (Pos() != OldRenderPos && !(flags & MF_NOSECTOR)) { sector_t *sec = Sector; double lasth = -FLT_MAX; diff --git a/src/p_maputl.cpp b/src/p_maputl.cpp index 759ab5d6c..f3dda49a9 100644 --- a/src/p_maputl.cpp +++ b/src/p_maputl.cpp @@ -499,6 +499,7 @@ void AActor::LinkToWorld(bool spawningmapthing, sector_t *sector) } } } + UpdateRenderSectorList(); } void AActor::SetOrigin(double x, double y, double z, bool moving) diff --git a/src/r_things.cpp b/src/r_things.cpp index 95b40916e..740440273 100644 --- a/src/r_things.cpp +++ b/src/r_things.cpp @@ -1295,6 +1295,7 @@ void R_DrawPSprite (pspdef_t* psp, int pspnum, AActor *owner, fixed_t sx, fixed_ FTexture* tex; vissprite_t* vis; static vissprite_t avis[NUMPSPRITES]; + vissprite_t tempvis; bool noaccel; assert(pspnum >= 0 && pspnum < NUMPSPRITES); @@ -1325,7 +1326,6 @@ void R_DrawPSprite (pspdef_t* psp, int pspnum, AActor *owner, fixed_t sx, fixed_ tx -= tex->GetScaledLeftOffset() << FRACBITS; x1 = (centerxfrac + FixedMul (tx, pspritexscale)) >>FRACBITS; - VisPSpritesX1[pspnum] = x1; // off the right side if (x1 > viewwidth) @@ -1339,14 +1339,12 @@ void R_DrawPSprite (pspdef_t* psp, int pspnum, AActor *owner, fixed_t sx, fixed_ return; // store information in a vissprite - vis = &avis[pspnum]; + vis = &tempvis; vis->renderflags = owner->renderflags; vis->floorclip = 0; - vis->texturemid = int(((BASEYCENTER<Scale.Y) + (tex->TopOffset << FRACBITS); - if (camera->player && (RenderTarget != screen || viewheight == RenderTarget->GetHeight() || (RenderTarget->GetWidth() > 320 && !st_scale))) @@ -1395,6 +1393,7 @@ void R_DrawPSprite (pspdef_t* psp, int pspnum, AActor *owner, fixed_t sx, fixed_ vis->startfrac += vis->xiscale*(vis->x1-x1); noaccel = false; + FDynamicColormap *colormap_to_use = NULL; if (pspnum <= ps_flash) { vis->Style.Alpha = float(owner->Alpha); @@ -1491,11 +1490,11 @@ void R_DrawPSprite (pspdef_t* psp, int pspnum, AActor *owner, fixed_t sx, fixed_ { noaccel = true; } - VisPSpritesBaseColormap[pspnum] = mybasecolormap; + colormap_to_use = mybasecolormap; } else { - VisPSpritesBaseColormap[pspnum] = basecolormap; + colormap_to_use = basecolormap; vis->Style.colormap = basecolormap->Maps; vis->Style.RenderStyle = STYLE_Normal; } @@ -1508,7 +1507,10 @@ void R_DrawPSprite (pspdef_t* psp, int pspnum, AActor *owner, fixed_t sx, fixed_ style.CheckFuzz(); if (style.BlendOp != STYLEOP_Fuzz) { - VisPSprites[pspnum] = vis; + VisPSpritesX1[pspnum] = x1; + VisPSpritesBaseColormap[pspnum] = colormap_to_use; + VisPSprites[pspnum] = &avis[pspnum]; + avis[pspnum] = *vis; return; } } @@ -1685,9 +1687,6 @@ void R_DrawRemainingPlayerSprites() } } - - - // // R_SortVisSprites // diff --git a/src/sound/fmodsound.cpp b/src/sound/fmodsound.cpp index d1a4efd17..a62998d3d 100644 --- a/src/sound/fmodsound.cpp +++ b/src/sound/fmodsound.cpp @@ -2090,7 +2090,7 @@ FMOD_MODE FMODSoundRenderer::SetChanHeadSettings(SoundListener *listener, FMOD:: } return oldmode; } - else if (cpos == pos) + else if ((cpos - pos).LengthSquared() < (0.0004 * 0.0004)) { // Head relative return (oldmode & ~FMOD_3D) | FMOD_2D; }