diff --git a/polymer/eduke32/build/include/build.h b/polymer/eduke32/build/include/build.h index 3b7438cab..7a3546514 100644 --- a/polymer/eduke32/build/include/build.h +++ b/polymer/eduke32/build/include/build.h @@ -1074,9 +1074,11 @@ static inline void rotatesprite_win(int32_t sx, int32_t sy, int32_t z, int16_t a void bfirst_search_init(int16_t *list, uint8_t *bitmap, int32_t *eltnumptr, int32_t maxnum, int16_t firstelt); void bfirst_search_try(int16_t *list, uint8_t *bitmap, int32_t *eltnumptr, int16_t elt); -extern int32_t clipmoveboxtracenum; int32_t clipmove(vec3_t *vect, int16_t *sectnum, int32_t xvect, int32_t yvect, int32_t walldist, int32_t ceildist, int32_t flordist, uint32_t cliptype) ATTRIBUTE((nonnull(1,2))); +int32_t clipmovex(vec3_t *pos, int16_t *sectnum, int32_t xvect, int32_t yvect, + int32_t walldist, int32_t ceildist, int32_t flordist, uint32_t cliptype, + uint8_t noslidep) ATTRIBUTE((nonnull(1,2))); int32_t clipinsidebox(int32_t x, int32_t y, int16_t wallnum, int32_t walldist); int32_t clipinsideboxline(int32_t x, int32_t y, int32_t x1, int32_t y1, int32_t x2, int32_t y2, int32_t walldist); diff --git a/polymer/eduke32/build/src/engine.c b/polymer/eduke32/build/src/engine.c index ac1b43a3e..51eee2094 100644 --- a/polymer/eduke32/build/src/engine.c +++ b/polymer/eduke32/build/src/engine.c @@ -12512,7 +12512,7 @@ int32_t lastwall(int16_t point) ////////// CLIPMOVE ////////// -int32_t clipmoveboxtracenum = 3; +static int32_t clipmoveboxtracenum = 3; #ifdef HAVE_CLIPSHAPE_FEATURE static int32_t clipsprite_try(const spritetype *spr, int32_t xmin, int32_t ymin, int32_t xmax, int32_t ymax) @@ -12660,6 +12660,23 @@ static void addclipline(int32_t dax1, int32_t day1, int32_t dax2, int32_t day2, } } +int32_t clipmovex(vec3_t *pos, int16_t *sectnum, + int32_t xvect, int32_t yvect, + int32_t walldist, int32_t ceildist, int32_t flordist, uint32_t cliptype, + uint8_t noslidep) +{ + int32_t ret; + const int32_t oboxtracenum = clipmoveboxtracenum; + + if (noslidep) + clipmoveboxtracenum = 1; + ret = clipmove(pos, sectnum, xvect, yvect, + walldist, ceildist, flordist, cliptype); + clipmoveboxtracenum = oboxtracenum; + + return ret; +} + // // clipmove // diff --git a/polymer/eduke32/source/gameexec.c b/polymer/eduke32/source/gameexec.c index 41cd8b519..d1307eced 100644 --- a/polymer/eduke32/source/gameexec.c +++ b/polymer/eduke32/source/gameexec.c @@ -2864,7 +2864,7 @@ nullquote: int32_t retvar=*insptr++, xvar=*insptr++, yvar=*insptr++, z=Gv_GetVarX(*insptr++), sectnumvar=*insptr++; int32_t xvect=Gv_GetVarX(*insptr++), yvect=Gv_GetVarX(*insptr++); int32_t walldist=Gv_GetVarX(*insptr++), floordist=Gv_GetVarX(*insptr++), ceildist=Gv_GetVarX(*insptr++); - int32_t clipmask=Gv_GetVarX(*insptr++), oclipmoveboxtracenum=clipmoveboxtracenum; + int32_t clipmask=Gv_GetVarX(*insptr++); int16_t sectnum; vect.x = Gv_GetVarX(xvar); @@ -2879,11 +2879,8 @@ nullquote: continue; } - if (tw==CON_CLIPMOVENOSLIDE) - clipmoveboxtracenum = 1; - Gv_SetVarX(retvar, clipmove(&vect, §num, xvect, yvect, walldist, floordist, ceildist, clipmask)); - if (tw==CON_CLIPMOVENOSLIDE) - clipmoveboxtracenum = oclipmoveboxtracenum; + Gv_SetVarX(retvar, clipmovex(&vect, §num, xvect, yvect, walldist, floordist, ceildist, + clipmask, (tw==CON_CLIPMOVENOSLIDE))); Gv_SetVarX(sectnumvar, sectnum); Gv_SetVarX(xvar, vect.x); Gv_SetVarX(yvar, vect.y);