diff --git a/src/p_spec.c b/src/p_spec.c index e61729a53..8920c6a34 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -7476,6 +7476,17 @@ void T_Scroll(scroll_t *s) } // end of switch } +static boolean IsSector3DBlock(sector_t* sec) +{ + size_t i; + for (i = 0; i < sec->linecount; i++) + { + if (sec->lines[i]->special >= 100 && sec->lines[i]->special < 300) + return true; + } + return false; +} + /** Adds a generalized scroller to the thinker list. * * \param type The enumerated type of scrolling. @@ -7489,6 +7500,7 @@ void T_Scroll(scroll_t *s) */ static void Add_Scroller(INT32 type, fixed_t dx, fixed_t dy, INT32 control, INT32 affectee, INT32 accel, INT32 exclusive) { + boolean is3dblock = IsSector3DBlock(§ors[affectee]); scroll_t *s = Z_Calloc(sizeof *s, PU_LEVSPEC, NULL); s->thinker.function.acp1 = (actionf_p1)T_Scroll; s->type = type; @@ -7502,7 +7514,16 @@ static void Add_Scroller(INT32 type, fixed_t dx, fixed_t dy, INT32 control, INT3 s->last_height = sectors[control].floorheight + sectors[control].ceilingheight; s->affectee = affectee; if (type == sc_carry || type == sc_carry_ceiling) + { sectors[affectee].specialflags |= SSF_CONVEYOR; + if (is3dblock) + { + if (type == sc_carry) + sectors[affectee].flags |= MSF_FLIPSPECIAL_CEILING; + else + sectors[affectee].flags |= MSF_FLIPSPECIAL_FLOOR; + } + } P_AddThinker(THINK_MAIN, &s->thinker); }