diff --git a/polymer/eduke32/build/include/build.h b/polymer/eduke32/build/include/build.h index d8770ecaf..38d5a3b90 100644 --- a/polymer/eduke32/build/include/build.h +++ b/polymer/eduke32/build/include/build.h @@ -659,7 +659,7 @@ int32_t changespritestat(int16_t spritenum, int16_t newstatnum); int32_t setsprite(int16_t spritenum, const vec3_t *new) ATTRIBUTE((nonnull(2))); int32_t setspritez(int16_t spritenum, const vec3_t *new) ATTRIBUTE((nonnull(2))); -void spriteheightofs(int16_t i, int32_t *height, int32_t *zofs); +void spriteheightofs(int16_t i, int32_t *height, int32_t *zofs, int32_t alsotileyofs); int32_t screencapture(const char *filename, char inverseit, const char *versionstr) ATTRIBUTE((nonnull(1))); diff --git a/polymer/eduke32/build/src/build.c b/polymer/eduke32/build/src/build.c index a32ef5eae..5d05cebd5 100644 --- a/polymer/eduke32/build/src/build.c +++ b/polymer/eduke32/build/src/build.c @@ -828,7 +828,7 @@ void spriteoncfz(int32_t i, int32_t *czptr, int32_t *fzptr) int32_t cz,fz, height, zofs; getzsofslope(sprite[i].sectnum, sprite[i].x,sprite[i].y, &cz, &fz); - spriteheightofs(i, &height, &zofs); + spriteheightofs(i, &height, &zofs, 0); if (czptr) *czptr = cz + height - zofs; diff --git a/polymer/eduke32/build/src/engine.c b/polymer/eduke32/build/src/engine.c index f54b6975b..c6a4a68ba 100644 --- a/polymer/eduke32/build/src/engine.c +++ b/polymer/eduke32/build/src/engine.c @@ -665,7 +665,6 @@ static void yax_tweakpicnums(int32_t bunchnum, int32_t cf, int32_t restore) static void yax_copytsprite(int32_t curbunchnum, int32_t resetsortcnt) { - int16_t bunchnum; int32_t i, spritenum, gotthrough, sectnum, cf; int32_t sortcnt = yax_spritesortcnt[yax_globallev]; const spritetype *spr; @@ -691,9 +690,9 @@ static void yax_copytsprite(int32_t curbunchnum, int32_t resetsortcnt) if (cf != -1) { - bunchnum = yax_getbunch(sectnum, cf); - if (yax_globallev != YAX_MAXDRAWS && curbunchnum != bunchnum) - continue; + if ((yax_globallev-YAX_MAXDRAWS)*(-1 + 2*cf) > 0) + if (yax_getbunch(sectnum, cf) != curbunchnum) + continue; sectnum = yax_getneighborsect(spr->x, spr->y, sectnum, cf, NULL); if (sectnum < 0) @@ -2206,7 +2205,7 @@ int32_t engine_addtsprite(int16_t z, int16_t sectnum) if (cb < 0 && fb < 0) return 0; - spriteheightofs(z, &spheight, &spzofs); + spriteheightofs(z, &spheight, &spzofs, 1); // TODO: get*zofslope? if (cb>=0 && spr->z+spzofs-spheight < sector[sectnum].ceilingz) @@ -10370,7 +10369,7 @@ int32_t krecip(int32_t num) return(krecipasm(num)); } -void spriteheightofs(int16_t i, int32_t *height, int32_t *zofs) +void spriteheightofs(int16_t i, int32_t *height, int32_t *zofs, int32_t alsotileyofs) { int32_t hei, flooraligned=((sprite[i].cstat&48)==32); @@ -10389,6 +10388,10 @@ void spriteheightofs(int16_t i, int32_t *height, int32_t *zofs) { if (sprite[i].cstat&128) *zofs = hei>>1; + + if (alsotileyofs && (unsigned)sprite[i].picnum < MAXTILES) + if (picanm[sprite[i].picnum]&0x00ff0000) + *zofs -= ((int8_t)((picanm[sprite[i].picnum]>>16)&255))*sprite[i].yrepeat<<2; } *height = hei; } diff --git a/polymer/eduke32/samples/trueror1.map b/polymer/eduke32/samples/trueror1.map index 9a99e3fd2..7d5e73af7 100644 Binary files a/polymer/eduke32/samples/trueror1.map and b/polymer/eduke32/samples/trueror1.map differ diff --git a/polymer/eduke32/source/astub.c b/polymer/eduke32/source/astub.c index 364701b50..8a5e9734e 100644 --- a/polymer/eduke32/source/astub.c +++ b/polymer/eduke32/source/astub.c @@ -4294,28 +4294,6 @@ restart: #undef TMPERRMSG_PRINT #undef TMPERRMSG_RETURN -#if 0 -static int32_t spriteonceilingz(int32_t i) -{ - int32_t z = getceilzofslope(searchsector, sprite[i].x,sprite[i].y); - int32_t height, zofs; - - spriteheightofs(i, &height, &ofs); - - return z + height-ofs; -} - -static int32_t spriteongroundz(int32_t i) -{ - int32_t z = getflorzofslope(searchsector, sprite[i].x,sprite[i].y); - int32_t zofs; - - spriteheightofs(i, NULL, &ofs); - - return z - ofs; -} -#endif - #define WIND1X 3 #define WIND1Y 150