git-svn-id: https://svn.eduke32.com/eduke32@1208 1a8010ca-5511-0410-912e-c29ae57300e0

This commit is contained in:
terminx 2009-01-13 12:23:18 +00:00
parent 16084e989e
commit 18896fd0cd
18 changed files with 3702 additions and 3570 deletions

View file

@ -402,6 +402,17 @@ OTHER VARIABLES:
you call the loadboard function. you call the loadboard function.
***************************************************************************/ ***************************************************************************/
typedef struct BPACK {
int32_t x, y, z;
} vec3_t;
typedef struct {
vec3_t pos;
int16_t hitsprite;
int16_t hitwall;
int16_t hitsect;
} hitdata_t;
int32_t preinitengine(void); // a partial setup of the engine used for launch windows int32_t preinitengine(void); // a partial setup of the engine used for launch windows
int32_t initengine(void); int32_t initengine(void);
void uninitengine(void); void uninitengine(void);
@ -443,12 +454,12 @@ void drawline256(int32_t x1, int32_t y1, int32_t x2, int32_t y2, char col);
int32_t printext16(int32_t xpos, int32_t ypos, int16_t col, int16_t backcol, char *name, char fontsize); int32_t printext16(int32_t xpos, int32_t ypos, int16_t col, int16_t backcol, char *name, char fontsize);
void printext256(int32_t xpos, int32_t ypos, int16_t col, int16_t backcol, char *name, char fontsize); void printext256(int32_t xpos, int32_t ypos, int16_t col, int16_t backcol, char *name, char fontsize);
int32_t clipmove(int32_t *x, int32_t *y, int32_t *z, int16_t *sectnum, int32_t xvect, int32_t yvect, int32_t walldist, int32_t ceildist, int32_t flordist, uint32_t cliptype); 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);
int32_t clipinsidebox(int32_t x, int32_t y, int16_t wallnum, int32_t walldist); 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); int32_t clipinsideboxline(int32_t x, int32_t y, int32_t x1, int32_t y1, int32_t x2, int32_t y2, int32_t walldist);
int32_t pushmove(int32_t *x, int32_t *y, int32_t *z, int16_t *sectnum, int32_t walldist, int32_t ceildist, int32_t flordist, uint32_t cliptype); int32_t pushmove(vec3_t *vect, int16_t *sectnum, int32_t walldist, int32_t ceildist, int32_t flordist, uint32_t cliptype);
void getzrange(int32_t x, int32_t y, int32_t z, int16_t sectnum, int32_t *ceilz, int32_t *ceilhit, int32_t *florz, int32_t *florhit, int32_t walldist, uint32_t cliptype); void getzrange(const vec3_t *vect, int16_t sectnum, int32_t *ceilz, int32_t *ceilhit, int32_t *florz, int32_t *florhit, int32_t walldist, uint32_t cliptype);
int32_t hitscan(int32_t xs, int32_t ys, int32_t zs, int16_t sectnum, int32_t vx, int32_t vy, int32_t vz, int16_t *hitsect, int16_t *hitwall, int16_t *hitsprite, int32_t *hitx, int32_t *hity, int32_t *hitz, uint32_t cliptype); int32_t hitscan(const vec3_t *sv, int16_t sectnum, int32_t vx, int32_t vy, int32_t vz, hitdata_t *hitinfo, uint32_t cliptype);
int32_t neartag(int32_t xs, int32_t ys, int32_t zs, int16_t sectnum, int16_t ange, int16_t *neartagsector, int16_t *neartagwall, int16_t *neartagsprite, int32_t *neartaghitdist, int32_t neartagrange, char tagsearch); int32_t neartag(int32_t xs, int32_t ys, int32_t zs, int16_t sectnum, int16_t ange, int16_t *neartagsector, int16_t *neartagwall, int16_t *neartagsprite, int32_t *neartaghitdist, int32_t neartagrange, char tagsearch);
int32_t cansee(int32_t x1, int32_t y1, int32_t z1, int16_t sect1, int32_t x2, int32_t y2, int32_t z2, int16_t sect2); int32_t cansee(int32_t x1, int32_t y1, int32_t z1, int16_t sect1, int32_t x2, int32_t y2, int32_t z2, int16_t sect2);
void updatesector(int32_t x, int32_t y, int16_t *sectnum); void updatesector(int32_t x, int32_t y, int16_t *sectnum);
@ -476,7 +487,7 @@ int32_t insertsprite(int16_t sectnum, int16_t statnum);
int32_t deletesprite(int16_t spritenum); int32_t deletesprite(int16_t spritenum);
int32_t changespritesect(int16_t spritenum, int16_t newsectnum); int32_t changespritesect(int16_t spritenum, int16_t newsectnum);
int32_t changespritestat(int16_t spritenum, int16_t newstatnum); int32_t changespritestat(int16_t spritenum, int16_t newstatnum);
int32_t setsprite(int16_t spritenum, int32_t newx, int32_t newy, int32_t newz); int32_t setsprite(int16_t spritenum, vec3_t *new);
int32_t screencapture(char *filename, char inverseit); int32_t screencapture(char *filename, char inverseit);

View file

@ -66,7 +66,8 @@ uint8_t buildkeys[NUMBUILDKEYS] =
0x9c,0x1c,0xd,0xc,0xf,0x29 0x9c,0x1c,0xd,0xc,0xf,0x29
}; };
int32_t posx, posy, posz, horiz = 100; vec3_t pos;
int32_t horiz = 100;
int32_t mousexsurp = 0, mouseysurp = 0; int32_t mousexsurp = 0, mouseysurp = 0;
int16_t ang, cursectnum; int16_t ang, cursectnum;
int32_t hvel; int32_t hvel;
@ -394,15 +395,15 @@ int32_t app_main(int32_t argc, const char **argv)
for (i=0;i<MAXSPRITES;i++) sprite[i].extra = -1; for (i=0;i<MAXSPRITES;i++) sprite[i].extra = -1;
ExtPreLoadMap(); ExtPreLoadMap();
i = loadboard(boardfilename,(!pathsearchmode&&grponlymode?2:0),&posx,&posy,&posz,&ang,&cursectnum); i = loadboard(boardfilename,(!pathsearchmode&&grponlymode?2:0),&pos.x,&pos.y,&pos.z,&ang,&cursectnum);
loadmhk(); loadmhk();
if (i == -2) i = loadoldboard(boardfilename,(!pathsearchmode&&grponlymode?2:0),&posx,&posy,&posz,&ang,&cursectnum); if (i == -2) i = loadoldboard(boardfilename,(!pathsearchmode&&grponlymode?2:0),&pos.x,&pos.y,&pos.z,&ang,&cursectnum);
if (i < 0) if (i < 0)
{ {
initspritelists(); initspritelists();
posx = 32768; pos.x = 32768;
posy = 32768; pos.y = 32768;
posz = 0; pos.z = 0;
ang = 1536; ang = 1536;
numsectors = 0; numsectors = 0;
numwalls = 0; numwalls = 0;
@ -415,15 +416,15 @@ int32_t app_main(int32_t argc, const char **argv)
updatenumsprites(); updatenumsprites();
startposx = posx; startposx = pos.x;
startposy = posy; startposy = pos.y;
startposz = posz; startposz = pos.z;
startang = ang; startang = ang;
startsectnum = cursectnum; // TX 20050225: moved to loadboard startsectnum = cursectnum; // TX 20050225: moved to loadboard
totalclock = 0; totalclock = 0;
updatesector(posx,posy,&cursectnum); updatesector(pos.x,pos.y,&cursectnum);
if (cursectnum == -1) if (cursectnum == -1)
{ {
@ -452,7 +453,7 @@ CANCEL:
ExtPreCheckKeys(); ExtPreCheckKeys();
drawrooms(posx,posy,posz,ang,horiz,cursectnum); drawrooms(pos.x,pos.y,pos.z,ang,horiz,cursectnum);
#ifdef SUPERBUILD #ifdef SUPERBUILD
ExtAnalyzeSprites(); ExtAnalyzeSprites();
#endif #endif
@ -593,8 +594,8 @@ void editinput(void)
int32_t mousz, bstatus; int32_t mousz, bstatus;
int32_t i, j, k, /*cnt,*/ tempint=0, doubvel/*, changedir, wallfind[2], daz[2]*/; int32_t i, j, k, /*cnt,*/ tempint=0, doubvel/*, changedir, wallfind[2], daz[2]*/;
int32_t /*dashade[2],*/ goalz, xvect, yvect,/*PK*/ zvect, hiz, loz; int32_t /*dashade[2],*/ goalz, xvect, yvect,/*PK*/ zvect, hiz, loz;
int16_t hitsect, hitwall, hitsprite; hitdata_t hitinfo;
int32_t hitx, hity, hitz, dax, day, hihit, lohit; int32_t dax, day, hihit, lohit;
// 3B 3C 3D 3E 3F 40 41 42 43 44 57 58 46 // 3B 3C 3D 3E 3F 40 41 42 43 44 57 58 46
// F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 SCROLL // F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 SCROLL
@ -654,11 +655,11 @@ void editinput(void)
if (noclip) if (noclip)
{ {
posx += xvect>>14; pos.x += xvect>>14;
posy += yvect>>14; pos.y += yvect>>14;
updatesector(posx,posy,&cursectnum); updatesector(pos.x,pos.y,&cursectnum);
} }
else clipmove(&posx,&posy,&posz,&cursectnum,xvect,yvect,128L,4L<<8,4L<<8,CLIPMASK0); else clipmove(&pos,&cursectnum,xvect,yvect,128L,4L<<8,4L<<8,CLIPMASK0);
} }
else if (!mlook && (bstatus&2) && !(bstatus&(1|4))) else if (!mlook && (bstatus&2) && !(bstatus&(1|4)))
{ {
@ -669,14 +670,14 @@ void editinput(void)
zmode = 2; zmode = 2;
xvect = -((mousx*(int32_t)sintable[(ang+2048)&2047])<<pk_uedaccel); xvect = -((mousx*(int32_t)sintable[(ang+2048)&2047])<<pk_uedaccel);
yvect = -((mousx*(int32_t)sintable[(ang+1536)&2047])<<pk_uedaccel); yvect = -((mousx*(int32_t)sintable[(ang+1536)&2047])<<pk_uedaccel);
posz += mousy<<(4+pk_uedaccel); pos.z += mousy<<(4+pk_uedaccel);
if (noclip) if (noclip)
{ {
posx += xvect>>14; pos.x += xvect>>14;
posy += yvect>>14; pos.y += yvect>>14;
updatesectorz(posx,posy,posz,&cursectnum); updatesectorz(pos.x,pos.y,pos.z,&cursectnum);
} }
else clipmove(&posx,&posy,&posz,&cursectnum,xvect,yvect,128L,4L<<8,4L<<8,CLIPMASK0); else clipmove(&pos,&cursectnum,xvect,yvect,128L,4L<<8,4L<<8,CLIPMASK0);
} }
else if (bstatus&4) else if (bstatus&4)
{ {
@ -696,14 +697,14 @@ void editinput(void)
zvect = mousy*(((int32_t)sintable[(tempint+2048)&2047])>>(10-pk_uedaccel)); zvect = mousy*(((int32_t)sintable[(tempint+2048)&2047])>>(10-pk_uedaccel));
posz += zvect; pos.z += zvect;
if (noclip) if (noclip)
{ {
posx += xvect>>16; pos.x += xvect>>16;
posy += yvect>>16; pos.y += yvect>>16;
updatesectorz(posx,posy,posz,&cursectnum); updatesectorz(pos.x,pos.y,pos.z,&cursectnum);
} }
else clipmove(&posx,&posy,&posz,&cursectnum,xvect>>2,yvect>>2,128L,4L<<8,4L<<8,CLIPMASK0); else clipmove(&pos,&cursectnum,xvect>>2,yvect>>2,128L,4L<<8,4L<<8,CLIPMASK0);
} }
} }
@ -747,10 +748,10 @@ void editinput(void)
// showmouse(); // showmouse();
// if (keystatus[0x3b] > 0) posx--; // if (keystatus[0x3b] > 0) pos.x--;
// if (keystatus[0x3c] > 0) posx++; // if (keystatus[0x3c] > 0) pos.x++;
// if (keystatus[0x3d] > 0) posy--; // if (keystatus[0x3d] > 0) pos.y--;
// if (keystatus[0x3e] > 0) posy++; // if (keystatus[0x3e] > 0) pos.y++;
// if (keystatus[0x43] > 0) ang--; // if (keystatus[0x43] > 0) ang--;
// if (keystatus[0x44] > 0) ang++; // if (keystatus[0x44] > 0) ang++;
@ -799,19 +800,19 @@ void editinput(void)
} }
if (noclip) if (noclip)
{ {
posx += xvect>>14; pos.x += xvect>>14;
posy += yvect>>14; pos.y += yvect>>14;
updatesector(posx,posy,&cursectnum); updatesector(pos.x,pos.y,&cursectnum);
} }
else clipmove(&posx,&posy,&posz,&cursectnum,xvect,yvect,128L,4L<<8,4L<<8,CLIPMASK0); else clipmove(&pos,&cursectnum,xvect,yvect,128L,4L<<8,4L<<8,CLIPMASK0);
} }
getzrange(posx,posy,posz,cursectnum,&hiz,&hihit,&loz,&lohit,128L,CLIPMASK0); getzrange(&pos,cursectnum,&hiz,&hihit,&loz,&lohit,128L,CLIPMASK0);
/* if (keystatus[0x3a] > 0) /* if (keystatus[0x3a] > 0)
{ {
zmode++; zmode++;
if (zmode == 3) zmode = 0; if (zmode == 3) zmode = 0;
if (zmode == 1) zlock = (loz-posz)&0xfffffc00; if (zmode == 1) zlock = (loz-pos.z)&0xfffffc00;
keystatus[0x3a] = 0; keystatus[0x3a] = 0;
}*/ }*/
@ -848,19 +849,19 @@ void editinput(void)
} }
} }
if (goalz != posz) if (goalz != pos.z)
{ {
if (posz < goalz) hvel += 64; if (pos.z < goalz) hvel += 64;
if (posz > goalz) hvel = ((goalz-posz)>>3); if (pos.z > goalz) hvel = ((goalz-pos.z)>>3);
posz += hvel; pos.z += hvel;
if (posz > loz-(4<<8)) posz = loz-(4<<8), hvel = 0; if (pos.z > loz-(4<<8)) pos.z = loz-(4<<8), hvel = 0;
if (posz < hiz+(4<<8)) posz = hiz+(4<<8), hvel = 0; if (pos.z < hiz+(4<<8)) pos.z = hiz+(4<<8), hvel = 0;
} }
} }
else else
{ {
goalz = posz; goalz = pos.z;
if (keystatus[buildkeys[BK_MOVEUP]]) //A if (keystatus[buildkeys[BK_MOVEUP]]) //A
{ {
if (keystatus[0x1d]|keystatus[0x9d]) if (keystatus[0x1d]|keystatus[0x9d])
@ -903,21 +904,21 @@ void editinput(void)
} }
if (zmode == 1) goalz = loz-zlock; if (zmode == 1) goalz = loz-zlock;
if (!noclip && (goalz < hiz+(4<<8))) goalz = ((loz+hiz)>>1); //ceiling&floor too close if (!noclip && (goalz < hiz+(4<<8))) goalz = ((loz+hiz)>>1); //ceiling&floor too close
if (zmode == 1) posz = goalz; if (zmode == 1) pos.z = goalz;
if (goalz != posz) if (goalz != pos.z)
{ {
//if (posz < goalz) hvel += (32<<keystatus[buildkeys[BK_RUN]]); //if (pos.z < goalz) hvel += (32<<keystatus[buildkeys[BK_RUN]]);
//if (posz > goalz) hvel -= (32<<keystatus[buildkeys[BK_RUN]]); //if (pos.z > goalz) hvel -= (32<<keystatus[buildkeys[BK_RUN]]);
if (posz < goalz) hvel = ((synctics* 192)<<keystatus[buildkeys[BK_RUN]]); if (pos.z < goalz) hvel = ((synctics* 192)<<keystatus[buildkeys[BK_RUN]]);
if (posz > goalz) hvel = ((synctics*-192)<<keystatus[buildkeys[BK_RUN]]); if (pos.z > goalz) hvel = ((synctics*-192)<<keystatus[buildkeys[BK_RUN]]);
posz += hvel; pos.z += hvel;
if (!noclip) if (!noclip)
{ {
if (posz > loz-(4<<8)) posz = loz-(4<<8), hvel = 0; if (pos.z > loz-(4<<8)) pos.z = loz-(4<<8), hvel = 0;
if (posz < hiz+(4<<8)) posz = hiz+(4<<8), hvel = 0; if (pos.z < hiz+(4<<8)) pos.z = hiz+(4<<8), hvel = 0;
} }
} }
else else
@ -936,19 +937,19 @@ void editinput(void)
day = divscale14(searchx-(xdim>>1),xdim>>1); day = divscale14(searchx-(xdim>>1),xdim>>1);
rotatepoint(0,0,dax,day,ang,&dax,&day); rotatepoint(0,0,dax,day,ang,&dax,&day);
hitscan(posx,posy,posz,cursectnum, //Start position hitscan((const vec3_t *)&pos,cursectnum, //Start position
dax,day,(scale(searchy,200,ydim)-horiz)*2000, //vector of 3D ang dax,day,(scale(searchy,200,ydim)-horiz)*2000, //vector of 3D ang
&hitsect,&hitwall,&hitsprite,&hitx,&hity,&hitz,CLIPMASK1); &hitinfo,CLIPMASK1);
if (hitsect >= 0) if (hitinfo.hitsect >= 0)
{ {
dax = hitx; dax = hitinfo.pos.x;
day = hity; day = hitinfo.pos.x;
if ((gridlock > 0) && (grid > 0)) if ((gridlock > 0) && (grid > 0))
{ {
if ((searchstat == 0) || (searchstat == 4)) if ((searchstat == 0) || (searchstat == 4))
{ {
hitz = (hitz&0xfffffc00); hitinfo.pos.y = (hitinfo.pos.y&0xfffffc00);
} }
else else
{ {
@ -957,7 +958,7 @@ void editinput(void)
} }
} }
i = insertsprite(hitsect,0); i = insertsprite(hitinfo.hitsect,0);
sprite[i].x = dax, sprite[i].y = day; sprite[i].x = dax, sprite[i].y = day;
sprite[i].cstat = defaultspritecstat; sprite[i].cstat = defaultspritecstat;
sprite[i].shade = 0; sprite[i].shade = 0;
@ -1011,22 +1012,27 @@ void editinput(void)
j = ((tilesizy[sprite[i].picnum]*sprite[i].yrepeat)<<1); j = ((tilesizy[sprite[i].picnum]*sprite[i].yrepeat)<<1);
if ((sprite[i].cstat&128) == 0) if ((sprite[i].cstat&128) == 0)
sprite[i].z = min(max(hitz,getceilzofslope(hitsect,hitx,hity)+(j<<1)),getflorzofslope(hitsect,hitx,hity)); sprite[i].z = min(max(hitinfo.pos.y,
getceilzofslope(hitinfo.hitsect,hitinfo.pos.x,hitinfo.pos.y)+(j<<1)),
getflorzofslope(hitinfo.hitsect,hitinfo.pos.x,hitinfo.pos.y));
else else
sprite[i].z = min(max(hitz,getceilzofslope(hitsect,hitx,hity)+j),getflorzofslope(hitsect,hitx,hity)-j); sprite[i].z = min(max(hitinfo.pos.y,
getceilzofslope(hitinfo.hitsect,hitinfo.pos.x,hitinfo.pos.y)+j),
getflorzofslope(hitinfo.hitsect,hitinfo.pos.x,hitinfo.pos.y)-j);
if ((searchstat == 0) || (searchstat == 4)) if ((searchstat == 0) || (searchstat == 4))
{ {
sprite[i].cstat = (sprite[i].cstat&~48)|(16+64); sprite[i].cstat = (sprite[i].cstat&~48)|(16+64);
if (hitwall >= 0) if (hitinfo.hitwall >= 0)
sprite[i].ang = ((getangle(wall[wall[hitwall].point2].x-wall[hitwall].x,wall[wall[hitwall].point2].y-wall[hitwall].y)+512)&2047); sprite[i].ang = ((getangle(wall[wall[hitinfo.hitwall].point2].x-wall[hitinfo.hitwall].x,
wall[wall[hitinfo.hitwall].point2].y-wall[hitinfo.hitwall].y)+512)&2047);
//Make sure sprite's in right sector //Make sure sprite's in right sector
if (inside(sprite[i].x,sprite[i].y,sprite[i].sectnum) == 0) if (inside(sprite[i].x,sprite[i].y,sprite[i].sectnum) == 0)
{ {
j = wall[hitwall].point2; j = wall[hitinfo.hitwall].point2;
sprite[i].x -= ksgn(wall[j].y-wall[hitwall].y); sprite[i].x -= ksgn(wall[j].y-wall[hitinfo.hitwall].y);
sprite[i].y += ksgn(wall[j].x-wall[hitwall].x); sprite[i].y += ksgn(wall[j].x-wall[hitinfo.hitwall].x);
} }
} }
else else
@ -1448,10 +1454,9 @@ void overheadeditor(void)
int16_t circlepoints, circleang1, circleang2, circleangdir; int16_t circlepoints, circleang1, circleang2, circleangdir;
int32_t sectorhighlightx=0, sectorhighlighty=0; int32_t sectorhighlightx=0, sectorhighlighty=0;
int16_t cursectorhighlight, sectorhighlightstat; int16_t cursectorhighlight, sectorhighlightstat;
int16_t hitsect, hitwall, hitsprite;
int32_t hitx, hity, hitz;
walltype *wal; walltype *wal;
int32_t prefixarg = 0; int32_t prefixarg = 0;
hitdata_t hitinfo;
//qsetmode640480(); //qsetmode640480();
qsetmodeany(xdim2d,ydim2d); qsetmodeany(xdim2d,ydim2d);
@ -1463,7 +1468,7 @@ void overheadeditor(void)
searchx = scale(searchx,xdim2d,xdimgame); searchx = scale(searchx,xdim2d,xdimgame);
searchy = scale(searchy,ydim2d-STATUS2DSIZ,ydimgame); searchy = scale(searchy,ydim2d-STATUS2DSIZ,ydimgame);
oposz = posz; oposz = pos.z;
begindrawing(); //{{{ begindrawing(); //{{{
clearbuf((char *)(frameplace + (ydim16*bytesperline)), (bytesperline*STATUS2DSIZ) >> 2, 0x00000000l); clearbuf((char *)(frameplace + (ydim16*bytesperline)), (bytesperline*STATUS2DSIZ) >> 2, 0x00000000l);
@ -1560,10 +1565,10 @@ void overheadeditor(void)
if (searchy < 8) searchy = 8; if (searchy < 8) searchy = 8;
if (searchy > ydim-8-1) searchy = ydim-8-1; if (searchy > ydim-8-1) searchy = ydim-8-1;
/* if (keystatus[0x3b] > 0) posx--, keystatus[0x3b] = 0; /* if (keystatus[0x3b] > 0) pos.x--, keystatus[0x3b] = 0;
if (keystatus[0x3c] > 0) posx++, keystatus[0x3c] = 0; if (keystatus[0x3c] > 0) pos.x++, keystatus[0x3c] = 0;
if (keystatus[0x3d] > 0) posy--, keystatus[0x3d] = 0; if (keystatus[0x3d] > 0) pos.y--, keystatus[0x3d] = 0;
if (keystatus[0x3e] > 0) posy++, keystatus[0x3e] = 0; if (keystatus[0x3e] > 0) pos.y++, keystatus[0x3e] = 0;
if (keystatus[0x43] > 0) ang--, keystatus[0x43] = 0; if (keystatus[0x43] > 0) ang--, keystatus[0x43] = 0;
if (keystatus[0x44] > 0) ang++, keystatus[0x44] = 0; */ if (keystatus[0x44] > 0) ang++, keystatus[0x44] = 0; */
if (angvel != 0) //ang += angvel * constant if (angvel != 0) //ang += angvel * constant
@ -1593,11 +1598,11 @@ void overheadeditor(void)
} }
if (noclip) if (noclip)
{ {
posx += xvect>>14; pos.x += xvect>>14;
posy += yvect>>14; pos.y += yvect>>14;
updatesector(posx,posy,&cursectnum); updatesector(pos.x,pos.y,&cursectnum);
} }
else clipmove(&posx,&posy,&posz,&cursectnum,xvect,yvect,128L,4L<<8,4L<<8,CLIPMASK0); else clipmove(&pos,&cursectnum,xvect,yvect,128L,4L<<8,4L<<8,CLIPMASK0);
} }
getpoint(searchx,searchy,&mousxplc,&mousyplc); getpoint(searchx,searchy,&mousxplc,&mousyplc);
@ -1634,18 +1639,18 @@ void overheadeditor(void)
if (graphicsmode == 2) if (graphicsmode == 2)
totalclocklock = totalclock; totalclocklock = totalclock;
drawmapview(posx, posy, zoom, 1536); drawmapview(pos.x, pos.y, zoom, 1536);
yxaspect = i; yxaspect = i;
ydim = j; ydim = j;
xyaspect = ii; xyaspect = ii;
} }
draw2dgrid(posx,posy,ang,zoom,grid); draw2dgrid(pos.x,pos.y,ang,zoom,grid);
ExtPreCheckKeys(); ExtPreCheckKeys();
x2 = mulscale14(startposx-posx,zoom); //Draw brown arrow (start) x2 = mulscale14(startposx-pos.x,zoom); //Draw brown arrow (start)
y2 = mulscale14(startposy-posy,zoom); y2 = mulscale14(startposy-pos.y,zoom);
if (((halfxdim16+x2) >= 2) && ((halfxdim16+x2) <= xdim-3)) if (((halfxdim16+x2) >= 2) && ((halfxdim16+x2) <= xdim-3))
if (((midydim16+y2) >= 2) && ((midydim16+y2) <= ydim16-3)) if (((midydim16+y2) >= 2) && ((midydim16+y2) <= ydim16-3))
{ {
@ -1658,7 +1663,7 @@ void overheadeditor(void)
enddrawing(); //}}} enddrawing(); //}}}
} }
draw2dscreen(posx,posy,ang,zoom,grid); draw2dscreen(pos.x,pos.y,ang,zoom,grid);
begindrawing(); //{{{ begindrawing(); //{{{
if (showtags == 1) if (showtags == 1)
@ -1684,8 +1689,8 @@ void overheadeditor(void)
day /= (endwall-startwall+1); day /= (endwall-startwall+1);
} }
dax = mulscale14(dax-posx,zoom); dax = mulscale14(dax-pos.x,zoom);
day = mulscale14(day-posy,zoom); day = mulscale14(day-pos.y,zoom);
x1 = halfxdim16+dax-(Bstrlen(dabuffer)<<1); x1 = halfxdim16+dax-(Bstrlen(dabuffer)<<1);
y1 = midydim16+day-4; y1 = midydim16+day-4;
@ -1704,10 +1709,10 @@ void overheadeditor(void)
} }
} }
x3 = divscale14(-halfxdim16,zoom)+posx; x3 = divscale14(-halfxdim16,zoom)+pos.x;
y3 = divscale14(-(midydim16-4),zoom)+posy; y3 = divscale14(-(midydim16-4),zoom)+pos.y;
x4 = divscale14(halfxdim16,zoom)+posx; x4 = divscale14(halfxdim16,zoom)+pos.x;
y4 = divscale14(ydim16-(midydim16-4),zoom)+posy; y4 = divscale14(ydim16-(midydim16-4),zoom)+pos.y;
if (newnumwalls >= 0) if (newnumwalls >= 0)
{ {
@ -1728,8 +1733,8 @@ void overheadeditor(void)
dabuffer = (char *)ExtGetWallCaption(i); dabuffer = (char *)ExtGetWallCaption(i);
if (dabuffer[0] != 0) if (dabuffer[0] != 0)
{ {
dax = mulscale14(dax-posx,zoom); dax = mulscale14(dax-pos.x,zoom);
day = mulscale14(day-posy,zoom); day = mulscale14(day-pos.y,zoom);
x1 = halfxdim16+dax-(Bstrlen(dabuffer)<<1); x1 = halfxdim16+dax-(Bstrlen(dabuffer)<<1);
y1 = midydim16+day-4; y1 = midydim16+day-4;
x2 = x1 + (Bstrlen(dabuffer)<<2)+2; x2 = x1 + (Bstrlen(dabuffer)<<2)+2;
@ -1761,8 +1766,8 @@ void overheadeditor(void)
dax = sprite[i].x; dax = sprite[i].x;
day = sprite[i].y; day = sprite[i].y;
dax = mulscale14(dax-posx,zoom); dax = mulscale14(dax-pos.x,zoom);
day = mulscale14(day-posy,zoom); day = mulscale14(day-pos.y,zoom);
x1 = halfxdim16+dax-(Bstrlen(dabuffer)<<1); x1 = halfxdim16+dax-(Bstrlen(dabuffer)<<1);
y1 = midydim16+day-4; y1 = midydim16+day-4;
x2 = x1 + (Bstrlen(dabuffer)<<2)+2; x2 = x1 + (Bstrlen(dabuffer)<<2)+2;
@ -1797,7 +1802,7 @@ void overheadeditor(void)
} }
} }
printcoords16(posx,posy,ang); printcoords16(pos.x,pos.y,ang);
numwalls = tempint; numwalls = tempint;
@ -1840,8 +1845,8 @@ void overheadeditor(void)
if (linehighlight>=0) if (linehighlight>=0)
{ {
getclosestpointonwall(mousxplc,mousyplc,(int32_t)linehighlight,&dax,&day); getclosestpointonwall(mousxplc,mousyplc,(int32_t)linehighlight,&dax,&day);
x2 = mulscale14(dax-posx,zoom); x2 = mulscale14(dax-pos.x,zoom);
y2 = mulscale14(day-posy,zoom); y2 = mulscale14(day-pos.y,zoom);
if (wall[linehighlight].nextsector >= 0) if (wall[linehighlight].nextsector >= 0)
drawline16(halfxdim16+x2,midydim16+y2,halfxdim16+x2,midydim16+y2,editorcolors[15]); drawline16(halfxdim16+x2,midydim16+y2,halfxdim16+x2,midydim16+y2,editorcolors[15]);
else else
@ -2102,8 +2107,8 @@ void overheadeditor(void)
/* /*
j = ydim16; ydim16 = ydim; j = ydim16; ydim16 = ydim;
clear2dscreen(); clear2dscreen();
draw2dgrid(posx,posy,ang,zoom,grid); draw2dgrid(pos.x,pos.y,ang,zoom,grid);
draw2dscreen(posx,posy,ang,zoom,grid); draw2dscreen(pos.x,pos.y,ang,zoom,grid);
*/ */
screencapture("captxxxx.tga",keystatus[0x2a]|keystatus[0x36]); screencapture("captxxxx.tga",keystatus[0x2a]|keystatus[0x36]);
@ -2111,8 +2116,8 @@ void overheadeditor(void)
/* /*
ydim16 = j; ydim16 = j;
clear2dscreen(); clear2dscreen();
draw2dgrid(posx,posy,ang,zoom,grid); draw2dgrid(pos.x,pos.y,ang,zoom,grid);
draw2dscreen(posx,posy,ang,zoom,grid); draw2dscreen(pos.x,pos.y,ang,zoom,grid);
*/ */
showframe(1); showframe(1);
} }
@ -2164,25 +2169,24 @@ void overheadeditor(void)
asksave = 1; asksave = 1;
i = (pointhighlight&16383); i = (pointhighlight&16383);
hitscan(sprite[i].x,sprite[i].y,sprite[i].z,sprite[i].sectnum, hitscan((const vec3_t *)&sprite[i],sprite[i].sectnum,
sintable[(sprite[i].ang+2560+1024)&2047], sintable[(sprite[i].ang+2560+1024)&2047],
sintable[(sprite[i].ang+2048+1024)&2047], sintable[(sprite[i].ang+2048+1024)&2047],
0, 0,&hitinfo,CLIPMASK1);
&hitsect,&hitwall,&hitsprite,&hitx,&hity,&hitz,CLIPMASK1);
sprite[i].x = hitx; sprite[i].x = hitinfo.pos.x;
sprite[i].y = hity; sprite[i].y = hitinfo.pos.y;
sprite[i].z = hitz; sprite[i].z = hitinfo.pos.z;
changespritesect(i,hitsect); changespritesect(i,hitinfo.hitsect);
if (hitwall >= 0) if (hitinfo.hitwall >= 0)
sprite[i].ang = ((getangle(wall[wall[hitwall].point2].x-wall[hitwall].x,wall[wall[hitwall].point2].y-wall[hitwall].y)+512)&2047); sprite[i].ang = ((getangle(wall[wall[hitinfo.hitwall].point2].x-wall[hitinfo.hitwall].x,wall[wall[hitinfo.hitwall].point2].y-wall[hitinfo.hitwall].y)+512)&2047);
//Make sure sprite's in right sector //Make sure sprite's in right sector
if (inside(sprite[i].x,sprite[i].y,sprite[i].sectnum) == 0) if (inside(sprite[i].x,sprite[i].y,sprite[i].sectnum) == 0)
{ {
j = wall[hitwall].point2; j = wall[hitinfo.hitwall].point2;
sprite[i].x -= ksgn(wall[j].y-wall[hitwall].y); sprite[i].x -= ksgn(wall[j].y-wall[hitinfo.hitwall].y);
sprite[i].y += ksgn(wall[j].x-wall[hitwall].x); sprite[i].y += ksgn(wall[j].x-wall[hitinfo.hitwall].x);
} }
} }
} }
@ -2388,9 +2392,9 @@ void overheadeditor(void)
} }
if (keystatus[0x46]) //Scroll lock (set starting position) if (keystatus[0x46]) //Scroll lock (set starting position)
{ {
startposx = posx; startposx = pos.x;
startposy = posy; startposy = pos.y;
startposz = posz; startposz = pos.z;
startang = ang; startang = ang;
startsectnum = cursectnum; startsectnum = cursectnum;
keystatus[0x46] = 0; keystatus[0x46] = 0;
@ -2799,7 +2803,7 @@ void overheadeditor(void)
{ {
j = (highlight[i]&16383); j = (highlight[i]&16383);
setsprite(j,sprite[j].x,sprite[j].y,sprite[j].z); setsprite(j,(vec3_t *)&sprite[j]);
tempint = ((tilesizy[sprite[j].picnum]*sprite[j].yrepeat)<<2); tempint = ((tilesizy[sprite[j].picnum]*sprite[j].yrepeat)<<2);
sprite[j].z = max(sprite[j].z,getceilzofslope(sprite[j].sectnum,sprite[j].x,sprite[j].y)+tempint); sprite[j].z = max(sprite[j].z,getceilzofslope(sprite[j].sectnum,sprite[j].x,sprite[j].y)+tempint);
@ -2811,7 +2815,7 @@ void overheadeditor(void)
{ {
j = (pointhighlight&16383); j = (pointhighlight&16383);
setsprite(j,sprite[j].x,sprite[j].y,sprite[j].z); setsprite(j,(vec3_t *)&sprite[j]);
tempint = ((tilesizy[sprite[j].picnum]*sprite[j].yrepeat)<<2); tempint = ((tilesizy[sprite[j].picnum]*sprite[j].yrepeat)<<2);
@ -3041,8 +3045,8 @@ SKIP:
{ {
searchx = halfxdim16; searchx = halfxdim16;
searchy = midydim16; searchy = midydim16;
posx = mousxplc; pos.x = mousxplc;
posy = mousyplc; pos.y = mousyplc;
} }
if (circlewall != -1 && (keystatus[0x4a] || (bstatus&32 && !(keystatus[0x1d]|keystatus[0x9d])))) // - if (circlewall != -1 && (keystatus[0x4a] || (bstatus&32 && !(keystatus[0x1d]|keystatus[0x9d])))) // -
@ -3070,8 +3074,8 @@ SKIP:
{ {
searchx = halfxdim16; searchx = halfxdim16;
searchy = midydim16; searchy = midydim16;
posx = mousxplc; pos.x = mousxplc;
posy = mousyplc; pos.y = mousyplc;
} }
if (zoom > 16384) zoom = 16384; if (zoom > 16384) zoom = 16384;
printmessage16("Zoom: %d",zoom); printmessage16("Zoom: %d",zoom);
@ -3083,8 +3087,8 @@ SKIP:
{ {
searchx = halfxdim16; searchx = halfxdim16;
searchy = midydim16; searchy = midydim16;
posx = mousxplc; pos.x = mousxplc;
posy = mousyplc; pos.y = mousyplc;
} }
if (zoom < 8) zoom = 8; if (zoom < 8) zoom = 8;
printmessage16("Zoom: %d",zoom); printmessage16("Zoom: %d",zoom);
@ -3442,7 +3446,7 @@ SKIP:
j = insertsprite(sprite[k].sectnum,sprite[k].statnum); j = insertsprite(sprite[k].sectnum,sprite[k].statnum);
Bmemcpy(&sprite[j],&sprite[k],sizeof(spritetype)); Bmemcpy(&sprite[j],&sprite[k],sizeof(spritetype));
sprite[j].sectnum = sprite[k].sectnum; //Don't let memcpy overwrite sector! sprite[j].sectnum = sprite[k].sectnum; //Don't let memcpy overwrite sector!
setsprite(j,sprite[j].x,sprite[j].y,sprite[j].z); setsprite(j,(vec3_t *)&sprite[j]);
} }
updatenumsprites(); updatenumsprites();
printmessage16("Sprites duplicated and stamped."); printmessage16("Sprites duplicated and stamped.");
@ -3481,8 +3485,8 @@ SKIP:
centerx = (((x1+x2) + scale(y1-y2,tempint1,tempint2))>>1); centerx = (((x1+x2) + scale(y1-y2,tempint1,tempint2))>>1);
centery = (((y1+y2) + scale(x2-x1,tempint1,tempint2))>>1); centery = (((y1+y2) + scale(x2-x1,tempint1,tempint2))>>1);
dax = mulscale14(centerx-posx,zoom); dax = mulscale14(centerx-pos.x,zoom);
day = mulscale14(centery-posy,zoom); day = mulscale14(centery-pos.y,zoom);
drawline16(halfxdim16+dax-2,midydim16+day-2,halfxdim16+dax+2,midydim16+day+2,editorcolors[14]); drawline16(halfxdim16+dax-2,midydim16+day-2,halfxdim16+dax+2,midydim16+day+2,editorcolors[14]);
drawline16(halfxdim16+dax-2,midydim16+day+2,halfxdim16+dax+2,midydim16+day-2,editorcolors[14]); drawline16(halfxdim16+dax-2,midydim16+day+2,halfxdim16+dax+2,midydim16+day-2,editorcolors[14]);
@ -3518,8 +3522,8 @@ SKIP:
insertpoint(circlewall,dax,day); insertpoint(circlewall,dax,day);
circlewall += m; circlewall += m;
} }
dax = mulscale14(dax-posx,zoom); dax = mulscale14(dax-pos.x,zoom);
day = mulscale14(day-posy,zoom); day = mulscale14(day-pos.y,zoom);
drawline16(halfxdim16+dax-pointsize,midydim16+day-pointsize,halfxdim16+dax+pointsize,midydim16+day-pointsize,editorcolors[14]); drawline16(halfxdim16+dax-pointsize,midydim16+day-pointsize,halfxdim16+dax+pointsize,midydim16+day-pointsize,editorcolors[14]);
drawline16(halfxdim16+dax+pointsize,midydim16+day-pointsize,halfxdim16+dax+pointsize,midydim16+day+pointsize,editorcolors[14]); drawline16(halfxdim16+dax+pointsize,midydim16+day-pointsize,halfxdim16+dax+pointsize,midydim16+day+pointsize,editorcolors[14]);
drawline16(halfxdim16+dax+pointsize,midydim16+day+pointsize,halfxdim16+dax-pointsize,midydim16+day+pointsize,editorcolors[14]); drawline16(halfxdim16+dax+pointsize,midydim16+day+pointsize,halfxdim16+dax-pointsize,midydim16+day+pointsize,editorcolors[14]);
@ -3966,7 +3970,7 @@ SKIP:
while (j != -1) while (j != -1)
{ {
k = nextspritesect[j]; k = nextspritesect[j];
setsprite(j,sprite[j].x,sprite[j].y,sprite[j].z); setsprite(j,(vec3_t *)&sprite[j]);
j = k; j = k;
} }
} }
@ -4278,7 +4282,7 @@ SKIP:
j = insertsprite(sprite[k].sectnum,sprite[k].statnum); j = insertsprite(sprite[k].sectnum,sprite[k].statnum);
Bmemcpy(&sprite[j],&sprite[k],sizeof(spritetype)); Bmemcpy(&sprite[j],&sprite[k],sizeof(spritetype));
sprite[j].sectnum = sprite[k].sectnum; //Don't let memcpy overwrite sector! sprite[j].sectnum = sprite[k].sectnum; //Don't let memcpy overwrite sector!
setsprite(j,sprite[j].x,sprite[j].y,sprite[j].z); setsprite(j,(vec3_t *)&sprite[j]);
} }
updatenumsprites(); updatenumsprites();
printmessage16("Sprites duplicated and stamped."); printmessage16("Sprites duplicated and stamped.");
@ -4363,7 +4367,7 @@ SKIP:
if (keystatus[buildkeys[BK_MODE2D_3D]]) if (keystatus[buildkeys[BK_MODE2D_3D]])
{ {
updatesector(posx,posy,&cursectnum); updatesector(pos.x,pos.y,&cursectnum);
if (cursectnum >= 0) if (cursectnum >= 0)
keystatus[buildkeys[BK_MODE2D_3D]] = 2; keystatus[buildkeys[BK_MODE2D_3D]] = 2;
else else
@ -4403,9 +4407,9 @@ nextmap:
for (i=0;i<MAXSPRITES;i++) sprite[i].extra = -1; for (i=0;i<MAXSPRITES;i++) sprite[i].extra = -1;
ExtPreLoadMap(); ExtPreLoadMap();
i = loadboard(boardfilename,(!pathsearchmode&&grponlymode?2:0),&posx,&posy,&posz,&ang,&cursectnum); i = loadboard(boardfilename,(!pathsearchmode&&grponlymode?2:0),&pos.x,&pos.y,&pos.z,&ang,&cursectnum);
if (i == -2) i = loadoldboard(boardfilename,(!pathsearchmode&&grponlymode?2:0),&posx,&posy,&posz,&ang,&cursectnum); if (i == -2) i = loadoldboard(boardfilename,(!pathsearchmode&&grponlymode?2:0),&pos.x,&pos.y,&pos.z,&ang,&cursectnum);
oposz = posz; oposz = pos.z;
if (i < 0) if (i < 0)
{ {
// printmessage16("Invalid map format."); // printmessage16("Invalid map format.");
@ -4419,9 +4423,9 @@ nextmap:
else printmessage16("Map %s loaded successfully.",boardfilename); else printmessage16("Map %s loaded successfully.",boardfilename);
} }
updatenumsprites(); updatenumsprites();
startposx = posx; //this is same startposx = pos.x; //this is same
startposy = posy; startposy = pos.y;
startposz = posz; startposz = pos.z;
startang = ang; startang = ang;
startsectnum = cursectnum; startsectnum = cursectnum;
} }
@ -4502,9 +4506,9 @@ CANCEL:
circlewall = -1; circlewall = -1;
circlepoints = 7; circlepoints = 7;
posx = 32768; //new board! pos.x = 32768; //new board!
posy = 32768; pos.y = 32768;
posz = 0; pos.z = 0;
ang = 1536; ang = 1536;
numsectors = 0; numsectors = 0;
numwalls = 0; numwalls = 0;
@ -4606,10 +4610,10 @@ CANCEL:
for (i=0;i<MAXSPRITES;i++) sprite[i].extra = -1; for (i=0;i<MAXSPRITES;i++) sprite[i].extra = -1;
ExtPreLoadMap(); ExtPreLoadMap();
i = loadboard(boardfilename,(!pathsearchmode&&grponlymode?2:0),&posx,&posy,&posz,&ang,&cursectnum); i = loadboard(boardfilename,(!pathsearchmode&&grponlymode?2:0),&pos.x,&pos.y,&pos.z,&ang,&cursectnum);
loadmhk(); loadmhk();
if (i == -2) i = loadoldboard(boardfilename,(!pathsearchmode&&grponlymode?2:0),&posx,&posy,&posz,&ang,&cursectnum); if (i == -2) i = loadoldboard(boardfilename,(!pathsearchmode&&grponlymode?2:0),&pos.x,&pos.y,&pos.z,&ang,&cursectnum);
oposz = posz; oposz = pos.z;
if (i < 0) if (i < 0)
{ {
printmessage16("Invalid map format."); printmessage16("Invalid map format.");
@ -4674,9 +4678,9 @@ CANCEL:
else printmessage16("Map %s loaded successfully.",boardfilename); else printmessage16("Map %s loaded successfully.",boardfilename);
} }
updatenumsprites(); updatenumsprites();
startposx = posx; //this is same startposx = pos.x; //this is same
startposy = posy; startposy = pos.y;
startposz = posz; startposz = pos.z;
startang = ang; startang = ang;
startsectnum = cursectnum; startsectnum = cursectnum;
} }
@ -4911,20 +4915,20 @@ CANCEL:
setbrightness(brightness,palette,0); setbrightness(brightness,palette,0);
posz = oposz; pos.z = oposz;
searchx = scale(searchx,xdimgame,xdim2d); searchx = scale(searchx,xdimgame,xdim2d);
searchy = scale(searchy,ydimgame,ydim2d-STATUS2DSIZ); searchy = scale(searchy,ydimgame,ydim2d-STATUS2DSIZ);
} }
void getpoint(int32_t searchxe, int32_t searchye, int32_t *x, int32_t *y) void getpoint(int32_t searchxe, int32_t searchye, int32_t *x, int32_t *y)
{ {
if (posx <= -editorgridextent) posx = -editorgridextent; if (pos.x <= -editorgridextent) pos.x = -editorgridextent;
if (posx >= editorgridextent) posx = editorgridextent; if (pos.x >= editorgridextent) pos.x = editorgridextent;
if (posy <= -editorgridextent) posy = -editorgridextent; if (pos.y <= -editorgridextent) pos.y = -editorgridextent;
if (posy >= editorgridextent) posy = editorgridextent; if (pos.y >= editorgridextent) pos.y = editorgridextent;
*x = posx + divscale14(searchxe-halfxdim16,zoom); *x = pos.x + divscale14(searchxe-halfxdim16,zoom);
*y = posy + divscale14(searchye-midydim16,zoom); *y = pos.y + divscale14(searchye-midydim16,zoom);
if (*x <= -editorgridextent) *x = -editorgridextent; if (*x <= -editorgridextent) *x = -editorgridextent;
if (*x >= editorgridextent) *x = editorgridextent; if (*x >= editorgridextent) *x = editorgridextent;
@ -5462,7 +5466,7 @@ int32_t _getnumber256(char *namestart, int32_t num, int32_t maxnumber, char sign
if (quitevent) quitevent = 0; if (quitevent) quitevent = 0;
} }
drawrooms(posx,posy,posz,ang,horiz,cursectnum); drawrooms(pos.x,pos.y,pos.z,ang,horiz,cursectnum);
#ifdef SUPERBUILD #ifdef SUPERBUILD
ExtAnalyzeSprites(); ExtAnalyzeSprites();
#endif #endif
@ -5885,8 +5889,8 @@ int32_t fillsector(int16_t sectnum, char fillcolor)
endwall = startwall + sector[sectnum].wallnum - 1; endwall = startwall + sector[sectnum].wallnum - 1;
for (z=startwall;z<=endwall;z++) for (z=startwall;z<=endwall;z++)
{ {
y1 = (((wall[z].y-posy)*zoom)>>14)+midydim16; y1 = (((wall[z].y-pos.y)*zoom)>>14)+midydim16;
y2 = (((wall[wall[z].point2].y-posy)*zoom)>>14)+midydim16; y2 = (((wall[wall[z].point2].y-pos.y)*zoom)>>14)+midydim16;
if (y1 < miny) miny = y1; if (y1 < miny) miny = y1;
if (y2 < miny) miny = y2; if (y2 < miny) miny = y2;
if (y1 > maxy) maxy = y1; if (y1 > maxy) maxy = y1;
@ -5897,7 +5901,7 @@ int32_t fillsector(int16_t sectnum, char fillcolor)
for (sy=miny+((totalclock>>2)&3);sy<=maxy;sy+=3) // JBF 20040116: numframes%3 -> (totalclock>>2)&3 for (sy=miny+((totalclock>>2)&3);sy<=maxy;sy+=3) // JBF 20040116: numframes%3 -> (totalclock>>2)&3
{ {
y = posy+(((sy-midydim16)<<14)/zoom); y = pos.y+(((sy-midydim16)<<14)/zoom);
fillist[0] = lborder; fillcnt = 1; fillist[0] = lborder; fillcnt = 1;
for (z=startwall;z<=endwall;z++) for (z=startwall;z<=endwall;z++)
@ -5913,7 +5917,7 @@ int32_t fillsector(int16_t sectnum, char fillcolor)
//if (x1*(y-y2) + x2*(y1-y) <= 0) //if (x1*(y-y2) + x2*(y1-y) <= 0)
{ {
dax = x1+scale(y-y1,x2-x1,y2-y1); dax = x1+scale(y-y1,x2-x1,y2-y1);
dax = (((dax-posx)*zoom)>>14)+halfxdim16; dax = (((dax-pos.x)*zoom)>>14)+halfxdim16;
if (dax >= lborder) if (dax >= lborder)
fillist[fillcnt++] = dax; fillist[fillcnt++] = dax;
} }
@ -6464,7 +6468,7 @@ void keytimerstuff(void)
if (vel < 0) vel = min(vel+6,0); if (vel < 0) vel = min(vel+6,0);
if (vel > 0) vel = max(vel-6,0); if (vel > 0) vel = max(vel-6,0);
/* if(mlook) /* if(mlook)
posz -= (horiz-101)*(vel/40); */ pos.z -= (horiz-101)*(vel/40); */
} }
void _printmessage16(const char *fmt, ...) void _printmessage16(const char *fmt, ...)

View file

@ -8265,16 +8265,19 @@ int32_t krecip(int32_t num)
// //
// setsprite // setsprite
// //
int32_t setsprite(int16_t spritenum, int32_t newx, int32_t newy, int32_t newz) int32_t setsprite(int16_t spritenum, vec3_t *new)
{ {
int16_t tempsectnum; int16_t tempsectnum;
Bmemcpy(&sprite[spritenum], new, sizeof(vec3_t));
/*
sprite[spritenum].x = newx; sprite[spritenum].x = newx;
sprite[spritenum].y = newy; sprite[spritenum].y = newy;
sprite[spritenum].z = newz; sprite[spritenum].z = newz;
*/
tempsectnum = sprite[spritenum].sectnum; tempsectnum = sprite[spritenum].sectnum;
updatesector(newx,newy,&tempsectnum); updatesector(new->x,new->y,&tempsectnum);
if (tempsectnum < 0) if (tempsectnum < 0)
return(-1); return(-1);
@ -8284,16 +8287,14 @@ int32_t setsprite(int16_t spritenum, int32_t newx, int32_t newy, int32_t newz)
return(0); return(0);
} }
int32_t setspritez(int16_t spritenum, int32_t newx, int32_t newy, int32_t newz) int32_t setspritez(int16_t spritenum, vec3_t *new)
{ {
int16_t tempsectnum; int16_t tempsectnum;
sprite[spritenum].x = newx; Bmemcpy(&sprite[spritenum], new, sizeof(vec3_t));
sprite[spritenum].y = newy;
sprite[spritenum].z = newz;
tempsectnum = sprite[spritenum].sectnum; tempsectnum = sprite[spritenum].sectnum;
updatesectorz(newx,newy,newz,&tempsectnum); updatesectorz(new->x,new->y,new->z,&tempsectnum);
if (tempsectnum < 0) if (tempsectnum < 0)
return(-1); return(-1);
@ -8473,9 +8474,8 @@ int32_t cansee(int32_t x1, int32_t y1, int32_t z1, int16_t sect1, int32_t x2, in
// //
// hitscan // hitscan
// //
int32_t hitscan(int32_t xs, int32_t ys, int32_t zs, int16_t sectnum, int32_t vx, int32_t vy, int32_t vz, int32_t hitscan(const vec3_t *sv, int16_t sectnum, int32_t vx, int32_t vy, int32_t vz,
int16_t *hitsect, int16_t *hitwall, int16_t *hitsprite, hitdata_t *hitinfo, uint32_t cliptype)
int32_t *hitx, int32_t *hity, int32_t *hitz, uint32_t cliptype)
{ {
sectortype *sec; sectortype *sec;
walltype *wal, *wal2; walltype *wal, *wal2;
@ -8489,10 +8489,10 @@ int32_t hitscan(int32_t xs, int32_t ys, int32_t zs, int16_t sectnum, int32_t vx,
int16_t nextsector; int16_t nextsector;
char clipyou; char clipyou;
*hitsect = -1; *hitwall = -1; *hitsprite = -1; hitinfo->hitsect = -1; hitinfo->hitwall = -1; hitinfo->hitsprite = -1;
if (sectnum < 0) return(-1); if (sectnum < 0) return(-1);
*hitx = hitscangoalx; *hity = hitscangoaly; hitinfo->pos.x = hitscangoalx; hitinfo->pos.y = hitscangoaly;
dawalclipmask = (cliptype&65535); dawalclipmask = (cliptype&65535);
dasprclipmask = (cliptype>>16); dasprclipmask = (cliptype>>16);
@ -8515,31 +8515,31 @@ int32_t hitscan(int32_t xs, int32_t ys, int32_t zs, int16_t sectnum, int32_t vx,
j = (vz<<8)-dmulscale15(dax,vy,-day,vx); j = (vz<<8)-dmulscale15(dax,vy,-day,vx);
if (j != 0) if (j != 0)
{ {
i = ((sec->ceilingz-zs)<<8)+dmulscale15(dax,ys-wal->y,-day,xs-wal->x); i = ((sec->ceilingz-sv->z)<<8)+dmulscale15(dax,sv->y-wal->y,-day,sv->x-wal->x);
if (((i^j) >= 0) && ((klabs(i)>>1) < klabs(j))) if (((i^j) >= 0) && ((klabs(i)>>1) < klabs(j)))
{ {
i = divscale30(i,j); i = divscale30(i,j);
x1 = xs + mulscale30(vx,i); x1 = sv->x + mulscale30(vx,i);
y1 = ys + mulscale30(vy,i); y1 = sv->y + mulscale30(vy,i);
z1 = zs + mulscale30(vz,i); z1 = sv->z + mulscale30(vz,i);
} }
} }
} }
else if ((vz < 0) && (zs >= sec->ceilingz)) else if ((vz < 0) && (sv->z >= sec->ceilingz))
{ {
z1 = sec->ceilingz; i = z1-zs; z1 = sec->ceilingz; i = z1-sv->z;
if ((klabs(i)>>1) < -vz) if ((klabs(i)>>1) < -vz)
{ {
i = divscale30(i,vz); i = divscale30(i,vz);
x1 = xs + mulscale30(vx,i); x1 = sv->x + mulscale30(vx,i);
y1 = ys + mulscale30(vy,i); y1 = sv->y + mulscale30(vy,i);
} }
} }
if ((x1 != 0x7fffffff) && (klabs(x1-xs)+klabs(y1-ys) < klabs((*hitx)-xs)+klabs((*hity)-ys))) if ((x1 != 0x7fffffff) && (klabs(x1-sv->x)+klabs(y1-sv->y) < klabs((hitinfo->pos.x)-sv->x)+klabs((hitinfo->pos.y)-sv->y)))
if (inside(x1,y1,dasector) != 0) if (inside(x1,y1,dasector) != 0)
{ {
*hitsect = dasector; *hitwall = -1; *hitsprite = -1; hitinfo->hitsect = dasector; hitinfo->hitwall = -1; hitinfo->hitsprite = -1;
*hitx = x1; *hity = y1; *hitz = z1; hitinfo->pos.x = x1; hitinfo->pos.y = y1; hitinfo->pos.z = z1;
} }
x1 = 0x7fffffff; x1 = 0x7fffffff;
@ -8554,31 +8554,31 @@ int32_t hitscan(int32_t xs, int32_t ys, int32_t zs, int16_t sectnum, int32_t vx,
j = (vz<<8)-dmulscale15(dax,vy,-day,vx); j = (vz<<8)-dmulscale15(dax,vy,-day,vx);
if (j != 0) if (j != 0)
{ {
i = ((sec->floorz-zs)<<8)+dmulscale15(dax,ys-wal->y,-day,xs-wal->x); i = ((sec->floorz-sv->z)<<8)+dmulscale15(dax,sv->y-wal->y,-day,sv->x-wal->x);
if (((i^j) >= 0) && ((klabs(i)>>1) < klabs(j))) if (((i^j) >= 0) && ((klabs(i)>>1) < klabs(j)))
{ {
i = divscale30(i,j); i = divscale30(i,j);
x1 = xs + mulscale30(vx,i); x1 = sv->x + mulscale30(vx,i);
y1 = ys + mulscale30(vy,i); y1 = sv->y + mulscale30(vy,i);
z1 = zs + mulscale30(vz,i); z1 = sv->z + mulscale30(vz,i);
} }
} }
} }
else if ((vz > 0) && (zs <= sec->floorz)) else if ((vz > 0) && (sv->z <= sec->floorz))
{ {
z1 = sec->floorz; i = z1-zs; z1 = sec->floorz; i = z1-sv->z;
if ((klabs(i)>>1) < vz) if ((klabs(i)>>1) < vz)
{ {
i = divscale30(i,vz); i = divscale30(i,vz);
x1 = xs + mulscale30(vx,i); x1 = sv->x + mulscale30(vx,i);
y1 = ys + mulscale30(vy,i); y1 = sv->y + mulscale30(vy,i);
} }
} }
if ((x1 != 0x7fffffff) && (klabs(x1-xs)+klabs(y1-ys) < klabs((*hitx)-xs)+klabs((*hity)-ys))) if ((x1 != 0x7fffffff) && (klabs(x1-sv->x)+klabs(y1-sv->y) < klabs((hitinfo->pos.x)-sv->x)+klabs((hitinfo->pos.y)-sv->y)))
if (inside(x1,y1,dasector) != 0) if (inside(x1,y1,dasector) != 0)
{ {
*hitsect = dasector; *hitwall = -1; *hitsprite = -1; hitinfo->hitsect = dasector; hitinfo->hitwall = -1; hitinfo->hitsprite = -1;
*hitx = x1; *hity = y1; *hitz = z1; hitinfo->pos.x = x1; hitinfo->pos.y = y1; hitinfo->pos.z = z1;
} }
startwall = sec->wallptr; endwall = startwall + sec->wallnum; startwall = sec->wallptr; endwall = startwall + sec->wallnum;
@ -8587,23 +8587,23 @@ int32_t hitscan(int32_t xs, int32_t ys, int32_t zs, int16_t sectnum, int32_t vx,
wal2 = &wall[wal->point2]; wal2 = &wall[wal->point2];
x1 = wal->x; y1 = wal->y; x2 = wal2->x; y2 = wal2->y; x1 = wal->x; y1 = wal->y; x2 = wal2->x; y2 = wal2->y;
if ((x1-xs)*(y2-ys) < (x2-xs)*(y1-ys)) continue; if ((x1-sv->x)*(y2-sv->y) < (x2-sv->x)*(y1-sv->y)) continue;
if (rintersect(xs,ys,zs,vx,vy,vz,x1,y1,x2,y2,&intx,&inty,&intz) == 0) continue; if (rintersect(sv->x,sv->y,sv->z,vx,vy,vz,x1,y1,x2,y2,&intx,&inty,&intz) == 0) continue;
if (klabs(intx-xs)+klabs(inty-ys) >= klabs((*hitx)-xs)+klabs((*hity)-ys)) continue; if (klabs(intx-sv->x)+klabs(inty-sv->y) >= klabs((hitinfo->pos.x)-sv->x)+klabs((hitinfo->pos.y)-sv->y)) continue;
nextsector = wal->nextsector; nextsector = wal->nextsector;
if ((nextsector < 0) || (wal->cstat&dawalclipmask)) if ((nextsector < 0) || (wal->cstat&dawalclipmask))
{ {
*hitsect = dasector; *hitwall = z; *hitsprite = -1; hitinfo->hitsect = dasector; hitinfo->hitwall = z; hitinfo->hitsprite = -1;
*hitx = intx; *hity = inty; *hitz = intz; hitinfo->pos.x = intx; hitinfo->pos.y = inty; hitinfo->pos.z = intz;
continue; continue;
} }
getzsofslope(nextsector,intx,inty,&daz,&daz2); getzsofslope(nextsector,intx,inty,&daz,&daz2);
if ((intz <= daz) || (intz >= daz2)) if ((intz <= daz) || (intz >= daz2))
{ {
*hitsect = dasector; *hitwall = z; *hitsprite = -1; hitinfo->hitsect = dasector; hitinfo->hitwall = z; hitinfo->hitsprite = -1;
*hitx = intx; *hity = inty; *hitz = intz; hitinfo->pos.x = intx; hitinfo->pos.y = inty; hitinfo->pos.z = intz;
continue; continue;
} }
@ -8625,29 +8625,29 @@ int32_t hitscan(int32_t xs, int32_t ys, int32_t zs, int16_t sectnum, int32_t vx,
switch (cstat&48) switch (cstat&48)
{ {
case 0: case 0:
topt = vx*(x1-xs) + vy*(y1-ys); if (topt <= 0) continue; topt = vx*(x1-sv->x) + vy*(y1-sv->y); if (topt <= 0) continue;
bot = vx*vx + vy*vy; if (bot == 0) continue; bot = vx*vx + vy*vy; if (bot == 0) continue;
intz = zs+scale(vz,topt,bot); intz = sv->z+scale(vz,topt,bot);
i = (tilesizy[spr->picnum]*spr->yrepeat<<2); i = (tilesizy[spr->picnum]*spr->yrepeat<<2);
if (cstat&128) z1 += (i>>1); if (cstat&128) z1 += (i>>1);
if (picanm[spr->picnum]&0x00ff0000) z1 -= ((int32_t)((int8_t)((picanm[spr->picnum]>>16)&255))*spr->yrepeat<<2); if (picanm[spr->picnum]&0x00ff0000) z1 -= ((int32_t)((int8_t)((picanm[spr->picnum]>>16)&255))*spr->yrepeat<<2);
if ((intz > z1) || (intz < z1-i)) continue; if ((intz > z1) || (intz < z1-i)) continue;
topu = vx*(y1-ys) - vy*(x1-xs); topu = vx*(y1-sv->y) - vy*(x1-sv->x);
offx = scale(vx,topu,bot); offx = scale(vx,topu,bot);
offy = scale(vy,topu,bot); offy = scale(vy,topu,bot);
dist = offx*offx + offy*offy; dist = offx*offx + offy*offy;
i = tilesizx[spr->picnum]*spr->xrepeat; i *= i; i = tilesizx[spr->picnum]*spr->xrepeat; i *= i;
if (dist > (i>>7)) continue; if (dist > (i>>7)) continue;
intx = xs + scale(vx,topt,bot); intx = sv->x + scale(vx,topt,bot);
inty = ys + scale(vy,topt,bot); inty = sv->y + scale(vy,topt,bot);
if (klabs(intx-xs)+klabs(inty-ys) > klabs((*hitx)-xs)+klabs((*hity)-ys)) continue; if (klabs(intx-sv->x)+klabs(inty-sv->y) > klabs((hitinfo->pos.x)-sv->x)+klabs((hitinfo->pos.y)-sv->y)) continue;
*hitsect = dasector; *hitwall = -1; *hitsprite = z; hitinfo->hitsect = dasector; hitinfo->hitwall = -1; hitinfo->hitsprite = z;
*hitx = intx; *hity = inty; *hitz = intz; hitinfo->pos.x = intx; hitinfo->pos.y = inty; hitinfo->pos.z = intz;
break; break;
case 16: case 16:
//These lines get the 2 points of the rotated sprite //These lines get the 2 points of the rotated sprite
@ -8662,39 +8662,39 @@ int32_t hitscan(int32_t xs, int32_t ys, int32_t zs, int16_t sectnum, int32_t vx,
y1 -= mulscale16(day,k); y2 = y1+mulscale16(day,l); y1 -= mulscale16(day,k); y2 = y1+mulscale16(day,l);
if ((cstat&64) != 0) //back side of 1-way sprite if ((cstat&64) != 0) //back side of 1-way sprite
if ((x1-xs)*(y2-ys) < (x2-xs)*(y1-ys)) continue; if ((x1-sv->x)*(y2-sv->y) < (x2-sv->x)*(y1-sv->y)) continue;
if (rintersect(xs,ys,zs,vx,vy,vz,x1,y1,x2,y2,&intx,&inty,&intz) == 0) continue; if (rintersect(sv->x,sv->y,sv->z,vx,vy,vz,x1,y1,x2,y2,&intx,&inty,&intz) == 0) continue;
if (klabs(intx-xs)+klabs(inty-ys) > klabs((*hitx)-xs)+klabs((*hity)-ys)) continue; if (klabs(intx-sv->x)+klabs(inty-sv->y) > klabs((hitinfo->pos.x)-sv->x)+klabs((hitinfo->pos.y)-sv->y)) continue;
k = ((tilesizy[spr->picnum]*spr->yrepeat)<<2); k = ((tilesizy[spr->picnum]*spr->yrepeat)<<2);
if (cstat&128) daz = spr->z+(k>>1); else daz = spr->z; if (cstat&128) daz = spr->z+(k>>1); else daz = spr->z;
if (picanm[spr->picnum]&0x00ff0000) daz -= ((int32_t)((int8_t)((picanm[spr->picnum]>>16)&255))*spr->yrepeat<<2); if (picanm[spr->picnum]&0x00ff0000) daz -= ((int32_t)((int8_t)((picanm[spr->picnum]>>16)&255))*spr->yrepeat<<2);
if ((intz < daz) && (intz > daz-k)) if ((intz < daz) && (intz > daz-k))
{ {
*hitsect = dasector; *hitwall = -1; *hitsprite = z; hitinfo->hitsect = dasector; hitinfo->hitwall = -1; hitinfo->hitsprite = z;
*hitx = intx; *hity = inty; *hitz = intz; hitinfo->pos.x = intx; hitinfo->pos.y = inty; hitinfo->pos.z = intz;
} }
break; break;
case 32: case 32:
if (vz == 0) continue; if (vz == 0) continue;
intz = z1; intz = z1;
if (((intz-zs)^vz) < 0) continue; if (((intz-sv->z)^vz) < 0) continue;
if ((cstat&64) != 0) if ((cstat&64) != 0)
if ((zs > intz) == ((cstat&8)==0)) continue; if ((sv->z > intz) == ((cstat&8)==0)) continue;
#if 1 // Abyss crash prevention code ((intz-zs)*zx overflowing a 8-bit word) #if 1 // Abyss crash prevention code ((intz-sv->z)*zx overflowing a 8-bit word)
zz=(int32_t)((intz-zs)*vx); zz=(int32_t)((intz-sv->z)*vx);
intx = xs+scale(zz,1,vz); intx = sv->x+scale(zz,1,vz);
zz=(int32_t)((intz-zs)*vy); zz=(int32_t)((intz-sv->z)*vy);
inty = ys+scale(zz,1,vz); inty = sv->y+scale(zz,1,vz);
#else #else
intx = xs+scale(intz-zs,vx,vz); intx = sv->x+scale(intz-sv->z,vx,vz);
inty = ys+scale(intz-zs,vy,vz); inty = sv->y+scale(intz-sv->z,vy,vz);
#endif #endif
if (klabs(intx-xs)+klabs(inty-ys) > klabs((*hitx)-xs)+klabs((*hity)-ys)) continue; if (klabs(intx-sv->x)+klabs(inty-sv->y) > klabs((hitinfo->pos.x)-sv->x)+klabs((hitinfo->pos.y)-sv->y)) continue;
tilenum = spr->picnum; tilenum = spr->picnum;
xoff = (int32_t)((int8_t)((picanm[tilenum]>>8)&255))+((int32_t)spr->xoffset); xoff = (int32_t)((int8_t)((picanm[tilenum]>>8)&255))+((int32_t)spr->xoffset);
@ -8741,8 +8741,8 @@ int32_t hitscan(int32_t xs, int32_t ys, int32_t zs, int16_t sectnum, int32_t vx,
if (clipyou != 0) if (clipyou != 0)
{ {
*hitsect = dasector; *hitwall = -1; *hitsprite = z; hitinfo->hitsect = dasector; hitinfo->hitwall = -1; hitinfo->hitsprite = z;
*hitx = intx; *hity = inty; *hitz = intz; hitinfo->pos.x = intx; hitinfo->pos.y = inty; hitinfo->pos.z = intz;
} }
break; break;
} }
@ -8967,7 +8967,7 @@ int32_t clipmoveboxtracenum = 3;
// //
// clipmove // clipmove
// //
int32_t clipmove(int32_t *x, int32_t *y, int32_t *z, int16_t *sectnum, int32_t clipmove(vec3_t *vect, int16_t *sectnum,
int32_t xvect, int32_t yvect, int32_t xvect, int32_t yvect,
int32_t walldist, int32_t ceildist, int32_t flordist, uint32_t cliptype) int32_t walldist, int32_t ceildist, int32_t flordist, uint32_t cliptype)
{ {
@ -8988,16 +8988,16 @@ int32_t clipmove(int32_t *x, int32_t *y, int32_t *z, int16_t *sectnum,
oxvect = xvect; oxvect = xvect;
oyvect = yvect; oyvect = yvect;
goalx = (*x) + (xvect>>14); goalx = (vect->x) + (xvect>>14);
goaly = (*y) + (yvect>>14); goaly = (vect->y) + (yvect>>14);
clipnum = 0; clipnum = 0;
cx = (((*x)+goalx)>>1); cx = (((vect->x)+goalx)>>1);
cy = (((*y)+goaly)>>1); cy = (((vect->y)+goaly)>>1);
//Extra walldist for sprites on sector lines //Extra walldist for sprites on sector lines
gx = goalx-(*x); gy = goaly-(*y); gx = goalx-(vect->x); gy = goaly-(vect->y);
rad = nsqrtasm(gx*gx + gy*gy) + MAXCLIPDIST+walldist + 8; rad = nsqrtasm(gx*gx + gy*gy) + MAXCLIPDIST+walldist + 8;
xmin = cx-rad; ymin = cy-rad; xmin = cx-rad; ymin = cy-rad;
xmax = cx+rad; ymax = cy+rad; xmax = cx+rad; ymax = cy+rad;
@ -9023,7 +9023,7 @@ int32_t clipmove(int32_t *x, int32_t *y, int32_t *z, int16_t *sectnum,
x1 = wal->x; y1 = wal->y; x2 = wal2->x; y2 = wal2->y; x1 = wal->x; y1 = wal->y; x2 = wal2->x; y2 = wal2->y;
dx = x2-x1; dy = y2-y1; dx = x2-x1; dy = y2-y1;
if (dx*((*y)-y1) < ((*x)-x1)*dy) continue; //If wall's not facing you if (dx*((vect->y)-y1) < ((vect->x)-x1)*dy) continue; //If wall's not facing you
if (dx > 0) dax = dx*(ymin-y1); else dax = dx*(ymax-y1); if (dx > 0) dax = dx*(ymin-y1); else dax = dx*(ymax-y1);
if (dy > 0) day = dy*(xmax-x1); else day = dy*(xmin-x1); if (dy > 0) day = dy*(xmax-x1); else day = dy*(xmin-x1);
@ -9033,22 +9033,22 @@ int32_t clipmove(int32_t *x, int32_t *y, int32_t *z, int16_t *sectnum,
if ((wal->nextsector < 0) || (wal->cstat&dawalclipmask)) clipyou = 1; if ((wal->nextsector < 0) || (wal->cstat&dawalclipmask)) clipyou = 1;
else if (editstatus == 0) else if (editstatus == 0)
{ {
if (rintersect(*x,*y,0,gx,gy,0,x1,y1,x2,y2,&dax,&day,&daz) == 0) if (rintersect(vect->x,vect->y,0,gx,gy,0,x1,y1,x2,y2,&dax,&day,&daz) == 0)
dax = *x, day = *y; dax = vect->x, day = vect->y;
daz = getflorzofslope((int16_t)dasect,dax,day); daz = getflorzofslope((int16_t)dasect,dax,day);
daz2 = getflorzofslope(wal->nextsector,dax,day); daz2 = getflorzofslope(wal->nextsector,dax,day);
sec2 = &sector[wal->nextsector]; sec2 = &sector[wal->nextsector];
if (daz2 < daz-(1<<8)) if (daz2 < daz-(1<<8))
if ((sec2->floorstat&1) == 0) if ((sec2->floorstat&1) == 0)
if ((*z) >= daz2-(flordist-1)) clipyou = 1; if ((vect->z) >= daz2-(flordist-1)) clipyou = 1;
if (clipyou == 0) if (clipyou == 0)
{ {
daz = getceilzofslope((int16_t)dasect,dax,day); daz = getceilzofslope((int16_t)dasect,dax,day);
daz2 = getceilzofslope(wal->nextsector,dax,day); daz2 = getceilzofslope(wal->nextsector,dax,day);
if (daz2 > daz+(1<<8)) if (daz2 > daz+(1<<8))
if ((sec2->ceilingstat&1) == 0) if ((sec2->ceilingstat&1) == 0)
if ((*z) <= daz2+(ceildist-1)) clipyou = 1; if ((vect->z) <= daz2+(ceildist-1)) clipyou = 1;
} }
} }
@ -9088,7 +9088,7 @@ int32_t clipmove(int32_t *x, int32_t *y, int32_t *z, int16_t *sectnum,
k = ((tilesizy[spr->picnum]*spr->yrepeat)<<2); k = ((tilesizy[spr->picnum]*spr->yrepeat)<<2);
if (cstat&128) daz = spr->z+(k>>1); else daz = spr->z; if (cstat&128) daz = spr->z+(k>>1); else daz = spr->z;
if (picanm[spr->picnum]&0x00ff0000) daz -= ((int32_t)((int8_t)((picanm[spr->picnum]>>16)&255))*spr->yrepeat<<2); if (picanm[spr->picnum]&0x00ff0000) daz -= ((int32_t)((int8_t)((picanm[spr->picnum]>>16)&255))*spr->yrepeat<<2);
if (((*z) < daz+ceildist) && ((*z) > daz-k-flordist)) if (((vect->z) < daz+ceildist) && ((vect->z) > daz-k-flordist))
{ {
bsz = (spr->clipdist<<2)+walldist; if (gx < 0) bsz = -bsz; bsz = (spr->clipdist<<2)+walldist; if (gx < 0) bsz = -bsz;
addclipline(x1-bsz,y1-bsz,x1-bsz,y1+bsz,(int16_t)j+49152); addclipline(x1-bsz,y1-bsz,x1-bsz,y1+bsz,(int16_t)j+49152);
@ -9103,7 +9103,7 @@ int32_t clipmove(int32_t *x, int32_t *y, int32_t *z, int16_t *sectnum,
if (picanm[spr->picnum]&0x00ff0000) daz -= ((int32_t)((int8_t)((picanm[spr->picnum]>>16)&255))*spr->yrepeat<<2); if (picanm[spr->picnum]&0x00ff0000) daz -= ((int32_t)((int8_t)((picanm[spr->picnum]>>16)&255))*spr->yrepeat<<2);
daz2 = daz-k; daz2 = daz-k;
daz += ceildist; daz2 -= flordist; daz += ceildist; daz2 -= flordist;
if (((*z) < daz) && ((*z) > daz2)) if (((vect->z) < daz) && ((vect->z) > daz2))
{ {
//These lines get the 2 points of the rotated sprite //These lines get the 2 points of the rotated sprite
//Given: (x1, y1) starts out as the center point //Given: (x1, y1) starts out as the center point
@ -9120,7 +9120,7 @@ int32_t clipmove(int32_t *x, int32_t *y, int32_t *z, int16_t *sectnum,
dax = mulscale14(sintable[(spr->ang+256+512)&2047],walldist); dax = mulscale14(sintable[(spr->ang+256+512)&2047],walldist);
day = mulscale14(sintable[(spr->ang+256)&2047],walldist); day = mulscale14(sintable[(spr->ang+256)&2047],walldist);
if ((x1-(*x))*(y2-(*y)) >= (x2-(*x))*(y1-(*y))) //Front if ((x1-(vect->x))*(y2-(vect->y)) >= (x2-(vect->x))*(y1-(vect->y))) //Front
{ {
addclipline(x1+dax,y1+day,x2+day,y2-dax,(int16_t)j+49152); addclipline(x1+dax,y1+day,x2+day,y2-dax,(int16_t)j+49152);
} }
@ -9131,9 +9131,9 @@ int32_t clipmove(int32_t *x, int32_t *y, int32_t *z, int16_t *sectnum,
} }
//Side blocker //Side blocker
if ((x2-x1)*((*x)-x1) + (y2-y1)*((*y)-y1) < 0) if ((x2-x1)*((vect->x)-x1) + (y2-y1)*((vect->y)-y1) < 0)
{ addclipline(x1-day,y1+dax,x1+dax,y1+day,(int16_t)j+49152); } { addclipline(x1-day,y1+dax,x1+dax,y1+day,(int16_t)j+49152); }
else if ((x1-x2)*((*x)-x2) + (y1-y2)*((*y)-y2) < 0) else if ((x1-x2)*((vect->x)-x2) + (y1-y2)*((vect->y)-y2) < 0)
{ addclipline(x2+day,y2-dax,x2-dax,y2-day,(int16_t)j+49152); } { addclipline(x2+day,y2-dax,x2-dax,y2-day,(int16_t)j+49152); }
} }
} }
@ -9141,10 +9141,10 @@ int32_t clipmove(int32_t *x, int32_t *y, int32_t *z, int16_t *sectnum,
case 32: case 32:
daz = spr->z+ceildist; daz = spr->z+ceildist;
daz2 = spr->z-flordist; daz2 = spr->z-flordist;
if (((*z) < daz) && ((*z) > daz2)) if (((vect->z) < daz) && ((vect->z) > daz2))
{ {
if ((cstat&64) != 0) if ((cstat&64) != 0)
if (((*z) > spr->z) == ((cstat&8)==0)) continue; if (((vect->z) > spr->z) == ((cstat&8)==0)) continue;
tilenum = spr->picnum; tilenum = spr->picnum;
xoff = (int32_t)((int8_t)((picanm[tilenum]>>8)&255))+((int32_t)spr->xoffset); xoff = (int32_t)((int8_t)((picanm[tilenum]>>8)&255))+((int32_t)spr->xoffset);
@ -9170,23 +9170,23 @@ int32_t clipmove(int32_t *x, int32_t *y, int32_t *z, int16_t *sectnum,
dax = mulscale14(sintable[(spr->ang-256+512)&2047],walldist); dax = mulscale14(sintable[(spr->ang-256+512)&2047],walldist);
day = mulscale14(sintable[(spr->ang-256)&2047],walldist); day = mulscale14(sintable[(spr->ang-256)&2047],walldist);
if ((rxi[0]-(*x))*(ryi[1]-(*y)) < (rxi[1]-(*x))*(ryi[0]-(*y))) if ((rxi[0]-(vect->x))*(ryi[1]-(vect->y)) < (rxi[1]-(vect->x))*(ryi[0]-(vect->y)))
{ {
if (clipinsideboxline(cx,cy,rxi[1],ryi[1],rxi[0],ryi[0],rad) != 0) if (clipinsideboxline(cx,cy,rxi[1],ryi[1],rxi[0],ryi[0],rad) != 0)
addclipline(rxi[1]-day,ryi[1]+dax,rxi[0]+dax,ryi[0]+day,(int16_t)j+49152); addclipline(rxi[1]-day,ryi[1]+dax,rxi[0]+dax,ryi[0]+day,(int16_t)j+49152);
} }
else if ((rxi[2]-(*x))*(ryi[3]-(*y)) < (rxi[3]-(*x))*(ryi[2]-(*y))) else if ((rxi[2]-(vect->x))*(ryi[3]-(vect->y)) < (rxi[3]-(vect->x))*(ryi[2]-(vect->y)))
{ {
if (clipinsideboxline(cx,cy,rxi[3],ryi[3],rxi[2],ryi[2],rad) != 0) if (clipinsideboxline(cx,cy,rxi[3],ryi[3],rxi[2],ryi[2],rad) != 0)
addclipline(rxi[3]+day,ryi[3]-dax,rxi[2]-dax,ryi[2]-day,(int16_t)j+49152); addclipline(rxi[3]+day,ryi[3]-dax,rxi[2]-dax,ryi[2]-day,(int16_t)j+49152);
} }
if ((rxi[1]-(*x))*(ryi[2]-(*y)) < (rxi[2]-(*x))*(ryi[1]-(*y))) if ((rxi[1]-(vect->x))*(ryi[2]-(vect->y)) < (rxi[2]-(vect->x))*(ryi[1]-(vect->y)))
{ {
if (clipinsideboxline(cx,cy,rxi[2],ryi[2],rxi[1],ryi[1],rad) != 0) if (clipinsideboxline(cx,cy,rxi[2],ryi[2],rxi[1],ryi[1],rad) != 0)
addclipline(rxi[2]-dax,ryi[2]-day,rxi[1]-day,ryi[1]+dax,(int16_t)j+49152); addclipline(rxi[2]-dax,ryi[2]-day,rxi[1]-day,ryi[1]+dax,(int16_t)j+49152);
} }
else if ((rxi[3]-(*x))*(ryi[0]-(*y)) < (rxi[0]-(*x))*(ryi[3]-(*y))) else if ((rxi[3]-(vect->x))*(ryi[0]-(vect->y)) < (rxi[0]-(vect->x))*(ryi[3]-(vect->y)))
{ {
if (clipinsideboxline(cx,cy,rxi[0],ryi[0],rxi[3],ryi[3],rad) != 0) if (clipinsideboxline(cx,cy,rxi[0],ryi[0],rxi[3],ryi[3],rad) != 0)
addclipline(rxi[0]+dax,ryi[0]+day,rxi[3]+day,ryi[3]-dax,(int16_t)j+49152); addclipline(rxi[0]+dax,ryi[0]+day,rxi[3]+day,ryi[3]-dax,(int16_t)j+49152);
@ -9204,7 +9204,7 @@ int32_t clipmove(int32_t *x, int32_t *y, int32_t *z, int16_t *sectnum,
do do
{ {
intx = goalx; inty = goaly; intx = goalx; inty = goaly;
if ((hitwall = raytrace(*x, *y, &intx, &inty)) >= 0) if ((hitwall = raytrace(vect->x, vect->y, &intx, &inty)) >= 0)
{ {
lx = clipit[hitwall].x2-clipit[hitwall].x1; lx = clipit[hitwall].x2-clipit[hitwall].x1;
ly = clipit[hitwall].y2-clipit[hitwall].y1; ly = clipit[hitwall].y2-clipit[hitwall].y1;
@ -9228,7 +9228,7 @@ int32_t clipmove(int32_t *x, int32_t *y, int32_t *z, int16_t *sectnum,
tempint2 = dmulscale6(clipit[j].x2-clipit[j].x1,oxvect,clipit[j].y2-clipit[j].y1,oyvect); tempint2 = dmulscale6(clipit[j].x2-clipit[j].x1,oxvect,clipit[j].y2-clipit[j].y1,oyvect);
if ((tempint1^tempint2) < 0) if ((tempint1^tempint2) < 0)
{ {
updatesector(*x,*y,sectnum); updatesector(vect->x,vect->y,sectnum);
return(retval); return(retval);
} }
} }
@ -9242,13 +9242,13 @@ int32_t clipmove(int32_t *x, int32_t *y, int32_t *z, int16_t *sectnum,
} }
cnt--; cnt--;
*x = intx; vect->x = intx;
*y = inty; vect->y = inty;
} }
while (((xvect|yvect) != 0) && (hitwall >= 0) && (cnt > 0)); while (((xvect|yvect) != 0) && (hitwall >= 0) && (cnt > 0));
for (j=0;j<clipsectnum;j++) for (j=0;j<clipsectnum;j++)
if (inside(*x,*y,clipsectorlist[j]) == 1) if (inside(vect->x,vect->y,clipsectorlist[j]) == 1)
{ {
*sectnum = clipsectorlist[j]; *sectnum = clipsectorlist[j];
return(retval); return(retval);
@ -9256,12 +9256,12 @@ int32_t clipmove(int32_t *x, int32_t *y, int32_t *z, int16_t *sectnum,
*sectnum = -1; tempint1 = 0x7fffffff; *sectnum = -1; tempint1 = 0x7fffffff;
for (j=numsectors-1;j>=0;j--) for (j=numsectors-1;j>=0;j--)
if (inside(*x,*y,j) == 1) if (inside(vect->x,vect->y,j) == 1)
{ {
if (sector[j].ceilingstat&2) if (sector[j].ceilingstat&2)
tempint2 = (getceilzofslope((int16_t)j,*x,*y)-(*z)); tempint2 = (getceilzofslope((int16_t)j,vect->x,vect->y)-(vect->z));
else else
tempint2 = (sector[j].ceilingz-(*z)); tempint2 = (sector[j].ceilingz-(vect->z));
if (tempint2 > 0) if (tempint2 > 0)
{ {
@ -9271,9 +9271,9 @@ int32_t clipmove(int32_t *x, int32_t *y, int32_t *z, int16_t *sectnum,
else else
{ {
if (sector[j].floorstat&2) if (sector[j].floorstat&2)
tempint2 = ((*z)-getflorzofslope((int16_t)j,*x,*y)); tempint2 = ((vect->z)-getflorzofslope((int16_t)j,vect->x,vect->y));
else else
tempint2 = ((*z)-sector[j].floorz); tempint2 = ((vect->z)-sector[j].floorz);
if (tempint2 <= 0) if (tempint2 <= 0)
{ {
@ -9292,7 +9292,7 @@ int32_t clipmove(int32_t *x, int32_t *y, int32_t *z, int16_t *sectnum,
// //
// pushmove // pushmove
// //
int32_t pushmove(int32_t *x, int32_t *y, int32_t *z, int16_t *sectnum, int32_t pushmove(vec3_t *vect, int16_t *sectnum,
int32_t walldist, int32_t ceildist, int32_t flordist, uint32_t cliptype) int32_t walldist, int32_t ceildist, int32_t flordist, uint32_t cliptype)
{ {
sectortype *sec, *sec2; sectortype *sec, *sec2;
@ -9324,14 +9324,14 @@ int32_t pushmove(int32_t *x, int32_t *y, int32_t *z, int16_t *sectnum,
if (((spr->cstat&48) != 0) && ((spr->cstat&48) != 48)) continue; if (((spr->cstat&48) != 0) && ((spr->cstat&48) != 48)) continue;
if ((spr->cstat&dasprclipmask) == 0) continue; if ((spr->cstat&dasprclipmask) == 0) continue;
dax = (*x)-spr->x; day = (*y)-spr->y; dax = (vect->x)-spr->x; day = (vect->y)-spr->y;
t = (spr->clipdist<<2)+walldist; t = (spr->clipdist<<2)+walldist;
if ((klabs(dax) < t) && (klabs(day) < t)) if ((klabs(dax) < t) && (klabs(day) < t))
{ {
t = ((tilesizy[spr->picnum]*spr->yrepeat)<<2); t = ((tilesizy[spr->picnum]*spr->yrepeat)<<2);
if (spr->cstat&128) daz = spr->z+(t>>1); else daz = spr->z; if (spr->cstat&128) daz = spr->z+(t>>1); else daz = spr->z;
if (picanm[spr->picnum]&0x00ff0000) daz -= ((int32_t)((int8_t)((picanm[spr->picnum]>>16)&255))*spr->yrepeat<<2); if (picanm[spr->picnum]&0x00ff0000) daz -= ((int32_t)((int8_t)((picanm[spr->picnum]>>16)&255))*spr->yrepeat<<2);
if (((*z) < daz+ceildist) && ((*z) > daz-t-flordist)) if (((vect->z) < daz+ceildist) && ((vect->z) > daz-t-flordist))
{ {
t = (spr->clipdist<<2)+walldist; t = (spr->clipdist<<2)+walldist;
@ -9341,12 +9341,12 @@ int32_t pushmove(int32_t *x, int32_t *y, int32_t *z, int16_t *sectnum,
bad2 = 16; bad2 = 16;
do do
{ {
*x = (*x) + dx; *y = (*y) + dy; vect->x = (vect->x) + dx; vect->y = (vect->y) + dy;
bad2--; if (bad2 == 0) break; bad2--; if (bad2 == 0) break;
} while ((klabs((*x)-spr->x) < t) && (klabs((*y)-spr->y) < t)); } while ((klabs((vect->x)-spr->x) < t) && (klabs((vect->y)-spr->y) < t));
bad = -1; bad = -1;
k--; if (k <= 0) return(bad); k--; if (k <= 0) return(bad);
updatesector(*x,*y,sectnum); updatesector(vect->x,vect->y,sectnum);
} }
} }
}*/ }*/
@ -9358,7 +9358,7 @@ int32_t pushmove(int32_t *x, int32_t *y, int32_t *z, int16_t *sectnum,
endwall = sec->wallptr, startwall = endwall + sec->wallnum; endwall = sec->wallptr, startwall = endwall + sec->wallnum;
for (i=startwall,wal=&wall[startwall];i!=endwall;i+=dir,wal+=dir) for (i=startwall,wal=&wall[startwall];i!=endwall;i+=dir,wal+=dir)
if (clipinsidebox(*x,*y,i,walldist-4) == 1) if (clipinsidebox(vect->x,vect->y,i,walldist-4) == 1)
{ {
j = 0; j = 0;
if (wal->nextsector < 0) j = 1; if (wal->nextsector < 0) j = 1;
@ -9368,10 +9368,10 @@ int32_t pushmove(int32_t *x, int32_t *y, int32_t *z, int16_t *sectnum,
sec2 = &sector[wal->nextsector]; sec2 = &sector[wal->nextsector];
//Find closest point on wall (dax, day) to (*x, *y) //Find closest point on wall (dax, day) to (vect->x, vect->y)
dax = wall[wal->point2].x-wal->x; dax = wall[wal->point2].x-wal->x;
day = wall[wal->point2].y-wal->y; day = wall[wal->point2].y-wal->y;
daz = dax*((*x)-wal->x) + day*((*y)-wal->y); daz = dax*((vect->x)-wal->x) + day*((vect->y)-wal->y);
if (daz <= 0) if (daz <= 0)
t = 0; t = 0;
else else
@ -9386,12 +9386,12 @@ int32_t pushmove(int32_t *x, int32_t *y, int32_t *z, int16_t *sectnum,
daz = getflorzofslope(clipsectorlist[clipsectcnt],dax,day); daz = getflorzofslope(clipsectorlist[clipsectcnt],dax,day);
daz2 = getflorzofslope(wal->nextsector,dax,day); daz2 = getflorzofslope(wal->nextsector,dax,day);
if ((daz2 < daz-(1<<8)) && ((sec2->floorstat&1) == 0)) if ((daz2 < daz-(1<<8)) && ((sec2->floorstat&1) == 0))
if (*z >= daz2-(flordist-1)) j = 1; if (vect->z >= daz2-(flordist-1)) j = 1;
daz = getceilzofslope(clipsectorlist[clipsectcnt],dax,day); daz = getceilzofslope(clipsectorlist[clipsectcnt],dax,day);
daz2 = getceilzofslope(wal->nextsector,dax,day); daz2 = getceilzofslope(wal->nextsector,dax,day);
if ((daz2 > daz+(1<<8)) && ((sec2->ceilingstat&1) == 0)) if ((daz2 > daz+(1<<8)) && ((sec2->ceilingstat&1) == 0))
if (*z <= daz2+(ceildist-1)) j = 1; if (vect->z <= daz2+(ceildist-1)) j = 1;
} }
if (j != 0) if (j != 0)
{ {
@ -9401,13 +9401,13 @@ int32_t pushmove(int32_t *x, int32_t *y, int32_t *z, int16_t *sectnum,
bad2 = 16; bad2 = 16;
do do
{ {
*x = (*x) + dx; *y = (*y) + dy; vect->x = (vect->x) + dx; vect->y = (vect->y) + dy;
bad2--; if (bad2 == 0) break; bad2--; if (bad2 == 0) break;
} }
while (clipinsidebox(*x,*y,i,walldist-4) != 0); while (clipinsidebox(vect->x,vect->y,i,walldist-4) != 0);
bad = -1; bad = -1;
k--; if (k <= 0) return(bad); k--; if (k <= 0) return(bad);
updatesector(*x,*y,sectnum); updatesector(vect->x,vect->y,sectnum);
} }
else else
{ {
@ -9548,7 +9548,7 @@ int32_t krand(void)
// //
// getzrange // getzrange
// //
void getzrange(int32_t x, int32_t y, int32_t z, int16_t sectnum, void getzrange(const vec3_t *vect, int16_t sectnum,
int32_t *ceilz, int32_t *ceilhit, int32_t *florz, int32_t *florhit, int32_t *ceilz, int32_t *ceilhit, int32_t *florz, int32_t *florhit,
int32_t walldist, uint32_t cliptype) int32_t walldist, uint32_t cliptype)
{ {
@ -9560,6 +9560,7 @@ void getzrange(int32_t x, int32_t y, int32_t z, int16_t sectnum,
int32_t x1, y1, x2, y2, x3, y3, x4, y4, ang, cosang, sinang; int32_t x1, y1, x2, y2, x3, y3, x4, y4, ang, cosang, sinang;
int32_t xspan, yspan, xrepeat, yrepeat, dasprclipmask, dawalclipmask; int32_t xspan, yspan, xrepeat, yrepeat, dasprclipmask, dawalclipmask;
int16_t cstat; int16_t cstat;
char clipyou; char clipyou;
if (sectnum < 0) if (sectnum < 0)
@ -9571,10 +9572,10 @@ void getzrange(int32_t x, int32_t y, int32_t z, int16_t sectnum,
//Extra walldist for sprites on sector lines //Extra walldist for sprites on sector lines
i = walldist+MAXCLIPDIST+1; i = walldist+MAXCLIPDIST+1;
xmin = x-i; ymin = y-i; xmin = vect->x-i; ymin = vect->y-i;
xmax = x+i; ymax = y+i; xmax = vect->x+i; ymax = vect->y+i;
getzsofslope(sectnum,x,y,ceilz,florz); getzsofslope(sectnum,vect->x,vect->y,ceilz,florz);
*ceilhit = sectnum+16384; *florhit = sectnum+16384; *ceilhit = sectnum+16384; *florhit = sectnum+16384;
dawalclipmask = (cliptype&65535); dawalclipmask = (cliptype&65535);
@ -9601,7 +9602,7 @@ void getzrange(int32_t x, int32_t y, int32_t z, int16_t sectnum,
if ((y1 > ymax) && (y2 > ymax)) continue; if ((y1 > ymax) && (y2 > ymax)) continue;
dx = x2-x1; dy = y2-y1; dx = x2-x1; dy = y2-y1;
if (dx*(y-y1) < (x-x1)*dy) continue; //back if (dx*(vect->y-y1) < (vect->x-x1)*dy) continue; //back
if (dx > 0) dax = dx*(ymin-y1); else dax = dx*(ymax-y1); if (dx > 0) dax = dx*(ymin-y1); else dax = dx*(ymax-y1);
if (dy > 0) day = dy*(xmax-x1); else day = dy*(xmin-x1); if (dy > 0) day = dy*(xmax-x1); else day = dy*(xmin-x1);
if (dax >= day) continue; if (dax >= day) continue;
@ -9610,8 +9611,8 @@ void getzrange(int32_t x, int32_t y, int32_t z, int16_t sectnum,
sec = &sector[k]; sec = &sector[k];
if (editstatus == 0) if (editstatus == 0)
{ {
if (((sec->ceilingstat&1) == 0) && (z <= sec->ceilingz+(3<<8))) continue; if (((sec->ceilingstat&1) == 0) && (vect->z <= sec->ceilingz+(3<<8))) continue;
if (((sec->floorstat&1) == 0) && (z >= sec->floorz-(3<<8))) continue; if (((sec->floorstat&1) == 0) && (vect->z >= sec->floorz-(3<<8))) continue;
} }
for (i=clipsectnum-1;i>=0;i--) if (clipsectorlist[i] == k) break; for (i=clipsectnum-1;i>=0;i--) if (clipsectorlist[i] == k) break;
@ -9626,7 +9627,7 @@ void getzrange(int32_t x, int32_t y, int32_t z, int16_t sectnum,
if (dax >= day) continue; if (dax >= day) continue;
//It actually got here, through all the continue's!!! //It actually got here, through all the continue's!!!
getzsofslope((int16_t)k,x,y,&daz,&daz2); getzsofslope((int16_t)k,vect->x,vect->y,&daz,&daz2);
if (daz > *ceilz) { *ceilz = daz; *ceilhit = k+16384; } if (daz > *ceilz) { *ceilz = daz; *ceilhit = k+16384; }
if (daz2 < *florz) { *florz = daz2; *florhit = k+16384; } if (daz2 < *florz) { *florz = daz2; *florhit = k+16384; }
} }
@ -9650,7 +9651,7 @@ void getzrange(int32_t x, int32_t y, int32_t z, int16_t sectnum,
{ {
case 0: case 0:
k = walldist+(spr->clipdist<<2)+1; k = walldist+(spr->clipdist<<2)+1;
if ((klabs(x1-x) <= k) && (klabs(y1-y) <= k)) if ((klabs(x1-vect->x) <= k) && (klabs(y1-vect->y) <= k))
{ {
daz = spr->z; daz = spr->z;
k = ((tilesizy[spr->picnum]*spr->yrepeat)<<1); k = ((tilesizy[spr->picnum]*spr->yrepeat)<<1);
@ -9669,7 +9670,7 @@ void getzrange(int32_t x, int32_t y, int32_t z, int16_t sectnum,
l = tilesizx[tilenum]; k = (l>>1)+xoff; l = tilesizx[tilenum]; k = (l>>1)+xoff;
x1 -= mulscale16(dax,k); x2 = x1+mulscale16(dax,l); x1 -= mulscale16(dax,k); x2 = x1+mulscale16(dax,l);
y1 -= mulscale16(day,k); y2 = y1+mulscale16(day,l); y1 -= mulscale16(day,k); y2 = y1+mulscale16(day,l);
if (clipinsideboxline(x,y,x1,y1,x2,y2,walldist+1) != 0) if (clipinsideboxline(vect->x,vect->y,x1,y1,x2,y2,walldist+1) != 0)
{ {
daz = spr->z; k = ((tilesizy[spr->picnum]*spr->yrepeat)<<1); daz = spr->z; k = ((tilesizy[spr->picnum]*spr->yrepeat)<<1);
if (cstat&128) daz += k; if (cstat&128) daz += k;
@ -9682,7 +9683,7 @@ void getzrange(int32_t x, int32_t y, int32_t z, int16_t sectnum,
daz = spr->z; daz2 = daz; daz = spr->z; daz2 = daz;
if ((cstat&64) != 0) if ((cstat&64) != 0)
if ((z > daz) == ((cstat&8)==0)) continue; if ((vect->z > daz) == ((cstat&8)==0)) continue;
tilenum = spr->picnum; tilenum = spr->picnum;
xoff = (int32_t)((int8_t)((picanm[tilenum]>>8)&255))+((int32_t)spr->xoffset); xoff = (int32_t)((int8_t)((picanm[tilenum]>>8)&255))+((int32_t)spr->xoffset);
@ -9696,8 +9697,8 @@ void getzrange(int32_t x, int32_t y, int32_t z, int16_t sectnum,
yspan = tilesizy[tilenum]; yrepeat = spr->yrepeat; yspan = tilesizy[tilenum]; yrepeat = spr->yrepeat;
dax = ((xspan>>1)+xoff)*xrepeat; day = ((yspan>>1)+yoff)*yrepeat; dax = ((xspan>>1)+xoff)*xrepeat; day = ((yspan>>1)+yoff)*yrepeat;
x1 += dmulscale16(sinang,dax,cosang,day)-x; x1 += dmulscale16(sinang,dax,cosang,day)-vect->x;
y1 += dmulscale16(sinang,day,-cosang,dax)-y; y1 += dmulscale16(sinang,day,-cosang,dax)-vect->y;
l = xspan*xrepeat; l = xspan*xrepeat;
x2 = x1 - mulscale16(sinang,l); x2 = x1 - mulscale16(sinang,l);
y2 = y1 + mulscale16(cosang,l); y2 = y1 + mulscale16(cosang,l);
@ -9735,8 +9736,8 @@ void getzrange(int32_t x, int32_t y, int32_t z, int16_t sectnum,
if (clipyou != 0) if (clipyou != 0)
{ {
if ((z > daz) && (daz > *ceilz)) { *ceilz = daz; *ceilhit = j+49152; } if ((vect->z > daz) && (daz > *ceilz)) { *ceilz = daz; *ceilhit = j+49152; }
if ((z < daz2) && (daz2 < *florz)) { *florz = daz2; *florhit = j+49152; } if ((vect->z < daz2) && (daz2 < *florz)) { *florz = daz2; *florhit = j+49152; }
} }
} }
} }

View file

@ -4421,9 +4421,10 @@ void polymost_drawrooms()
if (searchit == 2) if (searchit == 2)
{ {
int16_t hitsect, hitwall, hitsprite; int32_t vx, vy, vz;
int32_t vx, vy, vz, hitx, hity, hitz;
int32_t cz, fz; int32_t cz, fz;
hitdata_t hitinfo;
vec3_t vect;
double ratio = 1.05; double ratio = 1.05;
if (glwidescreen == 1) if (glwidescreen == 1)
@ -4458,37 +4459,41 @@ void polymost_drawrooms()
vy = (int32_t)(ox2*((float)singlobalang) + oy2*((float)cosglobalang)); vy = (int32_t)(ox2*((float)singlobalang) + oy2*((float)cosglobalang));
vz = (int32_t)(oz2*16384.0); vz = (int32_t)(oz2*16384.0);
vect.x = globalposx;
vect.y = globalposy;
vect.z = globalposz;
hitallsprites = 1; hitallsprites = 1;
hitscan(globalposx,globalposy,globalposz,globalcursectnum, //Start position hitscan((const vec3_t *)&vect,globalcursectnum, //Start position
vx>>12,vy>>12,vz>>8,&hitsect,&hitwall,&hitsprite,&hitx,&hity,&hitz,0xffff0030); vx>>12,vy>>12,vz>>8,&hitinfo,0xffff0030);
getzsofslope(hitsect,hitx,hity,&cz,&fz); getzsofslope(hitinfo.hitsect,hitinfo.pos.x,hitinfo.pos.y,&cz,&fz);
hitallsprites = 0; hitallsprites = 0;
searchsector = hitsect; searchsector = hitinfo.hitsect;
if (hitz<cz) searchstat = 1;else if (hitinfo.pos.z<cz) searchstat = 1;else
if (hitz>fz) searchstat = 2;else if (hitinfo.pos.z>fz) searchstat = 2;else
if (hitwall >= 0) if (hitinfo.hitwall >= 0)
{ {
searchwall = hitwall; searchstat = 0; searchwall = hitinfo.hitwall; searchstat = 0;
if (wall[hitwall].nextwall >= 0) if (wall[hitinfo.hitwall].nextwall >= 0)
{ {
int32_t cz, fz; int32_t cz, fz;
getzsofslope(wall[hitwall].nextsector,hitx,hity,&cz,&fz); getzsofslope(wall[hitinfo.hitwall].nextsector,hitinfo.pos.x,hitinfo.pos.y,&cz,&fz);
if (hitz > fz) if (hitinfo.pos.z > fz)
{ {
if (wall[hitwall].cstat&2) //'2' bottoms of walls if (wall[hitinfo.hitwall].cstat&2) //'2' bottoms of walls
searchwall = wall[hitwall].nextwall; searchwall = wall[hitinfo.hitwall].nextwall;
} }
else if ((hitz > cz) && (wall[hitwall].cstat&(16+32))) //masking or 1-way else if ((hitinfo.pos.z > cz) && (wall[hitinfo.hitwall].cstat&(16+32))) //masking or 1-way
searchstat = 4; searchstat = 4;
} }
} }
else if (hitsprite >= 0) { searchwall = hitsprite; searchstat = 3; } else if (hitinfo.hitsprite >= 0) { searchwall = hitinfo.hitsprite; searchstat = 3; }
else else
{ {
int32_t cz, fz; int32_t cz, fz;
getzsofslope(hitsect,hitx,hity,&cz,&fz); getzsofslope(hitinfo.hitsect,hitinfo.pos.x,hitinfo.pos.y,&cz,&fz);
if ((hitz<<1) < cz+fz) searchstat = 1; else searchstat = 2; if ((hitinfo.pos.z<<1) < cz+fz) searchstat = 1; else searchstat = 2;
//if (vz < 0) searchstat = 1; else searchstat = 2; //Won't work for slopes :/ //if (vz < 0) searchstat = 1; else searchstat = 2; //Won't work for slopes :/
} }
searchit = 0; searchit = 0;
@ -4563,6 +4568,7 @@ void polymost_drawmaskwall(int32_t damaskwallcnt)
float fy, x0, x1, sx0, sy0, sx1, sy1, xp0, yp0, xp1, yp1, oxp0, oyp0, ryp0, ryp1; float fy, x0, x1, sx0, sy0, sx1, sy1, xp0, yp0, xp1, yp1, oxp0, oyp0, ryp0, ryp1;
float r, t, t0, t1, csy[4], fsy[4]; float r, t, t0, t1, csy[4], fsy[4];
int32_t i, j, n, n2, z, sectnum, z1, z2, cz[4], fz[4], method; int32_t i, j, n, n2, z, sectnum, z1, z2, cz[4], fz[4], method;
int32_t m0, m1;
sectortype *sec, *nsec; sectortype *sec, *nsec;
walltype *wal, *wal2; walltype *wal, *wal2;
@ -4604,10 +4610,14 @@ void polymost_drawmaskwall(int32_t damaskwallcnt)
if (yp1 < SCISDIST) { t1 = (SCISDIST-oyp0)/(yp1-oyp0); xp1 = (xp1-oxp0)*t1+oxp0; yp1 = SCISDIST; } if (yp1 < SCISDIST) { t1 = (SCISDIST-oyp0)/(yp1-oyp0); xp1 = (xp1-oxp0)*t1+oxp0; yp1 = SCISDIST; }
else { t1 = 1.f; } else { t1 = 1.f; }
getzsofslope(sectnum,(int32_t)((wal2->x-wal->x)*t0+wal->x),(int32_t)((wal2->y-wal->y)*t0+wal->y),&cz[0],&fz[0]); m0 = (int32_t)((wal2->x-wal->x)*t0+wal->x);
getzsofslope(wal->nextsector,(int32_t)((wal2->x-wal->x)*t0+wal->x),(int32_t)((wal2->y-wal->y)*t0+wal->y),&cz[1],&fz[1]); m1 = (int32_t)((wal2->y-wal->y)*t0+wal->y);
getzsofslope(sectnum,(int32_t)((wal2->x-wal->x)*t1+wal->x),(int32_t)((wal2->y-wal->y)*t1+wal->y),&cz[2],&fz[2]); getzsofslope(sectnum,m0,m1,&cz[0],&fz[0]);
getzsofslope(wal->nextsector,(int32_t)((wal2->x-wal->x)*t1+wal->x),(int32_t)((wal2->y-wal->y)*t1+wal->y),&cz[3],&fz[3]); getzsofslope(wal->nextsector,m0,m1,&cz[1],&fz[1]);
m0 = (int32_t)((wal2->x-wal->x)*t1+wal->x);
m1 = (int32_t)((wal2->y-wal->y)*t1+wal->y);
getzsofslope(sectnum,m0,m1,&cz[2],&fz[2]);
getzsofslope(wal->nextsector,m0,m1,&cz[3],&fz[3]);
ryp0 = 1.f/yp0; ryp1 = 1.f/yp1; ryp0 = 1.f/yp0; ryp1 = 1.f/yp1;

View file

@ -475,10 +475,11 @@ BOLT:
int32_t A_MoveSprite(int32_t spritenum, const vec3_t *change, uint32_t cliptype) int32_t A_MoveSprite(int32_t spritenum, const vec3_t *change, uint32_t cliptype)
{ {
int32_t daz, oldx, oldy; int32_t oldx, oldy;
int32_t retval; int32_t retval;
int16_t dasectnum, cd; int16_t dasectnum, cd;
int32_t bg = A_CheckEnemySprite(&sprite[spritenum]); int32_t bg = A_CheckEnemySprite(&sprite[spritenum]);
int32_t dazoff = ((tilesizy[sprite[spritenum].picnum]*sprite[spritenum].yrepeat)<<1);
if (sprite[spritenum].statnum == 5 || (bg && sprite[spritenum].xrepeat < 4)) if (sprite[spritenum].statnum == 5 || (bg && sprite[spritenum].xrepeat < 4))
{ {
@ -486,13 +487,13 @@ int32_t A_MoveSprite(int32_t spritenum, const vec3_t *change, uint32_t cliptype)
sprite[spritenum].y += (change->y*TICSPERFRAME)>>2; sprite[spritenum].y += (change->y*TICSPERFRAME)>>2;
sprite[spritenum].z += (change->z*TICSPERFRAME)>>2; sprite[spritenum].z += (change->z*TICSPERFRAME)>>2;
if (bg) if (bg)
setsprite(spritenum,sprite[spritenum].x,sprite[spritenum].y,sprite[spritenum].z); setsprite(spritenum,(vec3_t *)&sprite[spritenum]);
return 0; return 0;
} }
dasectnum = sprite[spritenum].sectnum; dasectnum = sprite[spritenum].sectnum;
daz = sprite[spritenum].z - ((tilesizy[sprite[spritenum].picnum]*sprite[spritenum].yrepeat)<<1); // daz = sprite[spritenum].z - ;
if (bg) if (bg)
{ {
@ -500,7 +501,11 @@ int32_t A_MoveSprite(int32_t spritenum, const vec3_t *change, uint32_t cliptype)
oldy = sprite[spritenum].y; oldy = sprite[spritenum].y;
if (sprite[spritenum].xrepeat > 60) if (sprite[spritenum].xrepeat > 60)
retval = clipmove(&sprite[spritenum].x,&sprite[spritenum].y,&daz,&dasectnum,((change->x*TICSPERFRAME)<<11),((change->y*TICSPERFRAME)<<11),1024L,(4<<8),(4<<8),cliptype); {
sprite[spritenum].z -= dazoff;
retval = clipmove((vec3_t *)&sprite[spritenum],&dasectnum,((change->x*TICSPERFRAME)<<11),((change->y*TICSPERFRAME)<<11),1024L,(4<<8),(4<<8),cliptype);
sprite[spritenum].z += dazoff;
}
else else
{ {
if (sprite[spritenum].picnum == LIZMAN) if (sprite[spritenum].picnum == LIZMAN)
@ -510,7 +515,9 @@ int32_t A_MoveSprite(int32_t spritenum, const vec3_t *change, uint32_t cliptype)
else else
cd = 192L; cd = 192L;
retval = clipmove(&sprite[spritenum].x,&sprite[spritenum].y,&daz,&dasectnum,((change->x*TICSPERFRAME)<<11),((change->y*TICSPERFRAME)<<11),cd,(4<<8),(4<<8),cliptype); sprite[spritenum].z -= dazoff;
retval = clipmove((vec3_t *)&sprite[spritenum],&dasectnum,((change->x*TICSPERFRAME)<<11),((change->y*TICSPERFRAME)<<11),cd,(4<<8),(4<<8),cliptype);
sprite[spritenum].z += dazoff;
} }
if (dasectnum < 0 || (dasectnum >= 0 && if (dasectnum < 0 || (dasectnum >= 0 &&
@ -523,11 +530,13 @@ int32_t A_MoveSprite(int32_t spritenum, const vec3_t *change, uint32_t cliptype)
{ {
sprite[spritenum].x = oldx; sprite[spritenum].x = oldx;
sprite[spritenum].y = oldy; sprite[spritenum].y = oldy;
/* if (dasectnum >= 0 && sector[dasectnum].lotag == 1 && sprite[spritenum].picnum == LIZMAN) /*
if (dasectnum >= 0 && sector[dasectnum].lotag == 1 && sprite[spritenum].picnum == LIZMAN)
sprite[spritenum].ang = (krand()&2047); sprite[spritenum].ang = (krand()&2047);
else if ((ActorExtra[spritenum].temp_data[0]&3) == 1 && sprite[spritenum].picnum != COMMANDER) else if ((ActorExtra[spritenum].temp_data[0]&3) == 1 && sprite[spritenum].picnum != COMMANDER)
sprite[spritenum].ang = (krand()&2047); */ sprite[spritenum].ang = (krand()&2047);
setsprite(spritenum,oldx,oldy,sprite[spritenum].z); */
setsprite(spritenum,(vec3_t *)&sprite[spritenum]);
if (dasectnum < 0) dasectnum = 0; if (dasectnum < 0) dasectnum = 0;
return (16384+dasectnum); return (16384+dasectnum);
} }
@ -535,14 +544,19 @@ int32_t A_MoveSprite(int32_t spritenum, const vec3_t *change, uint32_t cliptype)
} }
else else
{ {
sprite[spritenum].z -= dazoff;
if (sprite[spritenum].statnum == 4) if (sprite[spritenum].statnum == 4)
retval = retval =
clipmove(&sprite[spritenum].x,&sprite[spritenum].y,&daz,&dasectnum,((change->x*TICSPERFRAME)<<11),((change->y*TICSPERFRAME)<<11),8L,(4<<8),(4<<8),cliptype); clipmove((vec3_t *)&sprite[spritenum],&dasectnum,((change->x*TICSPERFRAME)<<11),((change->y*TICSPERFRAME)<<11),8L,(4<<8),(4<<8),cliptype);
else else
retval = retval =
clipmove(&sprite[spritenum].x,&sprite[spritenum].y,&daz,&dasectnum,((change->x*TICSPERFRAME)<<11),((change->y*TICSPERFRAME)<<11),(int32_t)(sprite[spritenum].clipdist<<2),(4<<8),(4<<8),cliptype); clipmove((vec3_t *)&sprite[spritenum],&dasectnum,((change->x*TICSPERFRAME)<<11),((change->y*TICSPERFRAME)<<11),(int32_t)(sprite[spritenum].clipdist<<2),(4<<8),(4<<8),cliptype);
sprite[spritenum].z += dazoff;
} }
{
int32_t daz;
if (dasectnum >= 0) if (dasectnum >= 0)
if ((dasectnum != sprite[spritenum].sectnum)) if ((dasectnum != sprite[spritenum].sectnum))
changespritesect(spritenum,dasectnum); changespritesect(spritenum,dasectnum);
@ -551,6 +565,7 @@ int32_t A_MoveSprite(int32_t spritenum, const vec3_t *change, uint32_t cliptype)
sprite[spritenum].z = daz; sprite[spritenum].z = daz;
else if (retval == 0) else if (retval == 0)
return(16384+dasectnum); return(16384+dasectnum);
}
return(retval); return(retval);
} }
@ -1023,7 +1038,7 @@ void A_MoveDummyPlayers(void)
SX += (g_player[p].ps->posx-g_player[p].ps->oposx); SX += (g_player[p].ps->posx-g_player[p].ps->oposx);
SY += (g_player[p].ps->posy-g_player[p].ps->oposy); SY += (g_player[p].ps->posy-g_player[p].ps->oposy);
setsprite(i,SX,SY,SZ); setsprite(i,(vec3_t *)&sprite[i]);
BOLT: BOLT:
@ -1054,7 +1069,7 @@ static void G_MovePlayers(void) //Players
s->y = p->oposy; s->y = p->oposy;
ActorExtra[i].bposz = s->z = p->oposz+PHEIGHT; ActorExtra[i].bposz = s->z = p->oposz+PHEIGHT;
s->ang = p->oang; s->ang = p->oang;
setsprite(i,s->x,s->y,s->z); setsprite(i,(vec3_t *)s);
} }
else else
{ {
@ -1155,7 +1170,7 @@ static void G_MovePlayers(void) //Players
else else
{ {
s->ang = 2047-p->ang; s->ang = 2047-p->ang;
setsprite(i,s->x,s->y,s->z); setsprite(i,(vec3_t *)s);
} }
} }
@ -1408,10 +1423,18 @@ static void G_MoveStandables(void)
case 2: case 2:
case 6: case 6:
case 10: case 10:
{
vec3_t vect;
vect.x = msx[t[4]+1];
vect.y = msy[t[4]+1];
vect.z = sprite[j].z;
s->ang = getangle(msx[t[4]+1]-s->x,msy[t[4]+1]-s->y); s->ang = getangle(msx[t[4]+1]-s->x,msy[t[4]+1]-s->y);
setsprite(j,msx[t[4]+1],msy[t[4]+1],sprite[j].z); setsprite(j,&vect);
t[0]++; t[0]++;
goto BOLT; goto BOLT;
}
} }
j = nextj; j = nextj;
} }
@ -1465,7 +1488,7 @@ static void G_MoveStandables(void)
s->picnum++; s->picnum++;
if (s->picnum == (CRANE+2)) if (s->picnum == (CRANE+2))
{ {
p = CheckPlayerInSector(t[1]); p = G_CheckPlayerInSector(t[1]);
if (p >= 0 && g_player[p].ps->on_ground) if (p >= 0 && g_player[p].ps->on_ground)
{ {
s->owner = -2; s->owner = -2;
@ -1527,7 +1550,13 @@ static void G_MoveStandables(void)
else if (t[0]==9) else if (t[0]==9)
t[0] = 0; t[0] = 0;
setsprite(msy[t[4]+2],s->x,s->y,s->z-(34<<8)); {
vec3_t vect;
Bmemcpy(&vect,s,sizeof(vec3_t));
vect.z -= (34<<8);
setsprite(msy[t[4]+2],&vect);
}
if (s->owner != -1) if (s->owner != -1)
{ {
@ -1545,7 +1574,7 @@ static void G_MoveStandables(void)
if (s->owner >= 0) if (s->owner >= 0)
{ {
setsprite(s->owner,s->x,s->y,s->z); setsprite(s->owner,(vec3_t *)s);
ActorExtra[s->owner].bposx = s->x; ActorExtra[s->owner].bposx = s->x;
ActorExtra[s->owner].bposy = s->y; ActorExtra[s->owner].bposy = s->y;
@ -1555,10 +1584,17 @@ static void G_MoveStandables(void)
} }
else if (s->owner == -2) else if (s->owner == -2)
{ {
vec3_t vect;
g_player[p].ps->oposx = g_player[p].ps->posx = s->x-(sintable[(g_player[p].ps->ang+512)&2047]>>6); g_player[p].ps->oposx = g_player[p].ps->posx = s->x-(sintable[(g_player[p].ps->ang+512)&2047]>>6);
g_player[p].ps->oposy = g_player[p].ps->posy = s->y-(sintable[g_player[p].ps->ang&2047]>>6); g_player[p].ps->oposy = g_player[p].ps->posy = s->y-(sintable[g_player[p].ps->ang&2047]>>6);
g_player[p].ps->oposz = g_player[p].ps->posz = s->z+(2<<8); g_player[p].ps->oposz = g_player[p].ps->posz = s->z+(2<<8);
setsprite(g_player[p].ps->i,g_player[p].ps->posx,g_player[p].ps->posy,g_player[p].ps->posz);
vect.x = g_player[p].ps->posx;
vect.y = g_player[p].ps->posy;
vect.z = g_player[p].ps->posz;
setsprite(g_player[p].ps->i,&vect);
g_player[p].ps->cursectnum = sprite[g_player[p].ps->i].sectnum; g_player[p].ps->cursectnum = sprite[g_player[p].ps->i].sectnum;
} }
} }
@ -1711,7 +1747,7 @@ static void G_MoveStandables(void)
s->x += sintable[(T6+512)&2047]>>9; s->x += sintable[(T6+512)&2047]>>9;
s->y += sintable[(T6)&2047]>>9; s->y += sintable[(T6)&2047]>>9;
s->z -= (3<<8); s->z -= (3<<8);
setsprite(i,s->x,s->y,s->z); setsprite(i,(vec3_t *)s);
x = A_CheckHitSprite(i,&m); x = A_CheckHitSprite(i,&m);
@ -1729,7 +1765,7 @@ static void G_MoveStandables(void)
while (x > 0) while (x > 0)
{ {
j = A_Spawn(i,LASERLINE); j = A_Spawn(i,LASERLINE);
setsprite(j,sprite[j].x,sprite[j].y,sprite[j].z); setsprite(j,(vec3_t *)&sprite[j]);
sprite[j].hitag = s->hitag; sprite[j].hitag = s->hitag;
ActorExtra[j].temp_data[1] = sprite[j].z; ActorExtra[j].temp_data[1] = sprite[j].z;
@ -1748,7 +1784,7 @@ static void G_MoveStandables(void)
s->x = T4; s->x = T4;
s->y = T5; s->y = T5;
s->z += (3<<8); s->z += (3<<8);
setsprite(i,s->x,s->y,s->z); setsprite(i,(vec3_t *)s);
T4 = 0; T4 = 0;
// if( m >= 0 && lTripBombControl & TRIPBOMB_TRIPWIRE) // if( m >= 0 && lTripBombControl & TRIPBOMB_TRIPWIRE)
if (m >= 0 && ActorExtra[i].temp_data[6] != 1) if (m >= 0 && ActorExtra[i].temp_data[6] != 1)
@ -1769,14 +1805,14 @@ static void G_MoveStandables(void)
s->x += sintable[(T6+512)&2047]>>9; s->x += sintable[(T6+512)&2047]>>9;
s->y += sintable[(T6)&2047]>>9; s->y += sintable[(T6)&2047]>>9;
s->z -= (3<<8); s->z -= (3<<8);
setsprite(i,s->x,s->y,s->z); setsprite(i,(vec3_t *)s);
x = A_CheckHitSprite(i,&m); x = A_CheckHitSprite(i,&m);
s->x = T4; s->x = T4;
s->y = T5; s->y = T5;
s->z += (3<<8); s->z += (3<<8);
setsprite(i,s->x,s->y,s->z); setsprite(i,(vec3_t *)s);
// if( ActorExtra[i].lastvx != x && lTripBombControl & TRIPBOMB_TRIPWIRE) // if( ActorExtra[i].lastvx != x && lTripBombControl & TRIPBOMB_TRIPWIRE)
if (ActorExtra[i].lastvx != x && ActorExtra[i].temp_data[6] != 1) if (ActorExtra[i].lastvx != x && ActorExtra[i].temp_data[6] != 1)
@ -2211,7 +2247,7 @@ CLEAR_THE_BOLT:
else else
{ {
sector[sect].floorz += sector[sect].extra; sector[sect].floorz += sector[sect].extra;
p = CheckPlayerInSector(sect); p = G_CheckPlayerInSector(sect);
if (p >= 0) g_player[p].ps->posz += sector[sect].extra; if (p >= 0) g_player[p].ps->posz += sector[sect].extra;
} }
} }
@ -2225,7 +2261,7 @@ CLEAR_THE_BOLT:
else else
{ {
sector[sect].floorz -= sector[sect].extra; sector[sect].floorz -= sector[sect].extra;
p = CheckPlayerInSector(sect); p = G_CheckPlayerInSector(sect);
if (p >= 0) if (p >= 0)
g_player[p].ps->posz -= sector[sect].extra; g_player[p].ps->posz -= sector[sect].extra;
} }
@ -2235,7 +2271,7 @@ CLEAR_THE_BOLT:
if (t[5] == 1) goto BOLT; if (t[5] == 1) goto BOLT;
p = CheckPlayerInSector(sect); p = G_CheckPlayerInSector(sect);
if (p >= 0 && (g_player[p].ps->on_ground || s->ang == 512)) if (p >= 0 && (g_player[p].ps->on_ground || s->ang == 512))
{ {
if (t[0] == 0 && !G_CheckActivatorMotion(s->lotag)) if (t[0] == 0 && !G_CheckActivatorMotion(s->lotag))
@ -2680,10 +2716,10 @@ static void G_MoveWeapons(void)
} }
else else
{ {
vec3_t tmpvect; // vec3_t tmpvect;
setsprite(i,davect.x,davect.y,davect.z); setsprite(i,&davect);
Bmemcpy(&tmpvect, s, sizeof(int32_t) * 3); // Bmemcpy(&tmpvect, s, sizeof(int32_t) * 3);
A_DamageWall(i,j,&tmpvect,s->picnum); A_DamageWall(i,j,(vec3_t *)s,s->picnum);
if (ActorExtra[i].projectile.workslike & PROJECTILE_BOUNCESOFFWALLS) if (ActorExtra[i].projectile.workslike & PROJECTILE_BOUNCESOFFWALLS)
{ {
@ -2709,7 +2745,7 @@ static void G_MoveWeapons(void)
} }
else if ((j&49152) == 16384) else if ((j&49152) == 16384)
{ {
setsprite(i,davect.x,davect.y,davect.z); setsprite(i,&davect);
if (s->zvel < 0) if (s->zvel < 0)
{ {
@ -3002,7 +3038,7 @@ static void G_MoveWeapons(void)
else else
{ {
vec3_t tmpvect; vec3_t tmpvect;
setsprite(i,davect.x,davect.y,davect.z); setsprite(i,&davect);
Bmemcpy(&tmpvect, s, sizeof(int32_t) * 3); Bmemcpy(&tmpvect, s, sizeof(int32_t) * 3);
A_DamageWall(i,j,&tmpvect,s->picnum); A_DamageWall(i,j,&tmpvect,s->picnum);
@ -3024,7 +3060,7 @@ static void G_MoveWeapons(void)
} }
else if ((j&49152) == 16384) else if ((j&49152) == 16384)
{ {
setsprite(i,davect.x,davect.y,davect.z); setsprite(i,&davect);
if (s->zvel < 0) if (s->zvel < 0)
{ {
@ -3284,6 +3320,7 @@ static void G_MoveTransports(void)
if (k == 1) if (k == 1)
{ {
vec3_t vect;
g_player[p].ps->oposx = g_player[p].ps->posx += sprite[OW].x-SX; g_player[p].ps->oposx = g_player[p].ps->posx += sprite[OW].x-SX;
g_player[p].ps->oposy = g_player[p].ps->posy += sprite[OW].y-SY; g_player[p].ps->oposy = g_player[p].ps->posy += sprite[OW].y-SY;
@ -3292,7 +3329,12 @@ static void G_MoveTransports(void)
g_player[p].ps->cursectnum = sprite[OW].sectnum; g_player[p].ps->cursectnum = sprite[OW].sectnum;
changespritesect(j,sprite[OW].sectnum); changespritesect(j,sprite[OW].sectnum);
setsprite(g_player[p].ps->i,g_player[p].ps->posx,g_player[p].ps->posy,g_player[p].ps->posz+PHEIGHT);
vect.x = g_player[p].ps->posx;
vect.y = g_player[p].ps->posy;
vect.z = g_player[p].ps->posz+PHEIGHT;
setsprite(g_player[p].ps->i,&vect);
P_UpdateScreenPal(g_player[p].ps); P_UpdateScreenPal(g_player[p].ps);
@ -3387,7 +3429,7 @@ static void G_MoveTransports(void)
case 0: case 0:
if (onfloorz) if (onfloorz)
{ {
if (sprite[j].statnum == 4 || (CheckPlayerInSector(sect) == -1 && CheckPlayerInSector(sprite[OW].sectnum) == -1)) if (sprite[j].statnum == 4 || (G_CheckPlayerInSector(sect) == -1 && G_CheckPlayerInSector(sprite[OW].sectnum) == -1))
{ {
sprite[j].x += (sprite[OW].x-SX); sprite[j].x += (sprite[OW].x-SX);
sprite[j].y += (sprite[OW].y-SY); sprite[j].y += (sprite[OW].y-SY);
@ -3627,7 +3669,7 @@ static void G_MoveActors(void)
j = nextj; j = nextj;
} }
j = clipmove(&s->x,&s->y,&s->z,&s->sectnum, j = clipmove((vec3_t *)s,&s->sectnum,
(((s->xvel*(sintable[(s->ang+512)&2047]))>>14)*TICSPERFRAME)<<11, (((s->xvel*(sintable[(s->ang+512)&2047]))>>14)*TICSPERFRAME)<<11,
(((s->xvel*(sintable[s->ang&2047]))>>14)*TICSPERFRAME)<<11, (((s->xvel*(sintable[s->ang&2047]))>>14)*TICSPERFRAME)<<11,
24L,(4<<8),(4<<8),CLIPMASK1); 24L,(4<<8),(4<<8),CLIPMASK1);
@ -4037,7 +4079,7 @@ static void G_MoveActors(void)
goto BOLT; goto BOLT;
} }
setsprite(i,s->x,s->y,s->z); setsprite(i,(vec3_t *)s);
s->ang = g_player[p].ps->ang; s->ang = g_player[p].ps->ang;
@ -5017,7 +5059,7 @@ static void G_MoveMisc(void) // STATNUM 5
A_SetSprite(i,CLIPMASK0); A_SetSprite(i,CLIPMASK0);
if ((krand()&3) == 0) if ((krand()&3) == 0)
setsprite(i,s->x,s->y,s->z); setsprite(i,(vec3_t *)s);
if (s->sectnum == -1) KILLIT(i); if (s->sectnum == -1) KILLIT(i);
l = getflorzofslope(s->sectnum,s->x,s->y); l = getflorzofslope(s->sectnum,s->x,s->y);
@ -5068,7 +5110,7 @@ static void G_MoveMisc(void) // STATNUM 5
if (s->zvel > 1024 && s->zvel < 1280) if (s->zvel > 1024 && s->zvel < 1280)
{ {
setsprite(i,s->x,s->y,s->z); setsprite(i,(vec3_t *)s);
sect = s->sectnum; sect = s->sectnum;
} }
@ -5298,7 +5340,7 @@ static void G_MoveMisc(void) // STATNUM 5
s->xrepeat >>= 1; s->xrepeat >>= 1;
s->yrepeat >>= 1; s->yrepeat >>= 1;
if (rnd(96)) if (rnd(96))
setsprite(i,s->x,s->y,s->z); setsprite(i,(vec3_t *)s);
t[0]++;//Number of bounces t[0]++;//Number of bounces
} }
else if (t[0] == 3) KILLIT(i); else if (t[0] == 3) KILLIT(i);
@ -5323,7 +5365,7 @@ static void G_MoveMisc(void) // STATNUM 5
if (s->zvel > 1024 && s->zvel < 1280) if (s->zvel > 1024 && s->zvel < 1280)
{ {
setsprite(i,s->x,s->y,s->z); setsprite(i,(vec3_t *)s);
sect = s->sectnum; sect = s->sectnum;
} }
@ -5357,7 +5399,7 @@ static void G_MoveMisc(void) // STATNUM 5
if (s->picnum == SCRAP1 && s->yvel > 0) if (s->picnum == SCRAP1 && s->yvel > 0)
{ {
j = A_Spawn(i,s->yvel); j = A_Spawn(i,s->yvel);
setsprite(j,s->x,s->y,s->z); setsprite(j,(vec3_t *)s);
A_GetZLimits(j); A_GetZLimits(j);
sprite[j].hitag = sprite[j].lotag = 0; sprite[j].hitag = sprite[j].lotag = 0;
} }
@ -5678,7 +5720,7 @@ static void G_MoveEffectors(void) //STATNUM 3
g_player[p].ps->posy = s->y; g_player[p].ps->posy = s->y;
g_player[p].ps->cursectnum = s->sectnum; g_player[p].ps->cursectnum = s->sectnum;
setsprite(g_player[p].ps->i,s->x,s->y,s->z); setsprite(g_player[p].ps->i,(vec3_t *)s);
P_QuickKill(g_player[p].ps); P_QuickKill(g_player[p].ps);
} }
} }
@ -5742,7 +5784,7 @@ static void G_MoveEffectors(void) //STATNUM 3
} }
ms(i); ms(i);
setsprite(i,s->x,s->y,s->z); setsprite(i,(vec3_t *)s);
if ((sc->floorz-sc->ceilingz) < (108<<8)) if ((sc->floorz-sc->ceilingz) < (108<<8))
{ {
@ -5758,7 +5800,7 @@ static void G_MoveEffectors(void) //STATNUM 3
g_player[p].ps->oposy = g_player[p].ps->posy = s->y; g_player[p].ps->oposy = g_player[p].ps->posy = s->y;
g_player[p].ps->cursectnum = s->sectnum; g_player[p].ps->cursectnum = s->sectnum;
setsprite(g_player[p].ps->i,s->x,s->y,s->z); setsprite(g_player[p].ps->i,(vec3_t *)s);
P_QuickKill(g_player[p].ps); P_QuickKill(g_player[p].ps);
} }
} }
@ -5857,7 +5899,7 @@ static void G_MoveEffectors(void) //STATNUM 3
g_player[p].ps->posy = s->y; g_player[p].ps->posy = s->y;
g_player[p].ps->cursectnum = s->sectnum; g_player[p].ps->cursectnum = s->sectnum;
setsprite(g_player[p].ps->i,s->x,s->y,s->z); setsprite(g_player[p].ps->i,(vec3_t *)s);
P_QuickKill(g_player[p].ps); P_QuickKill(g_player[p].ps);
} }
} }
@ -5910,7 +5952,7 @@ static void G_MoveEffectors(void) //STATNUM 3
} }
ms(i); ms(i);
setsprite(i,s->x,s->y,s->z); setsprite(i,(vec3_t *)s);
if ((sc->floorz-sc->ceilingz) < (108<<8)) if ((sc->floorz-sc->ceilingz) < (108<<8))
{ {
@ -5930,7 +5972,7 @@ static void G_MoveEffectors(void) //STATNUM 3
g_player[p].ps->cursectnum = s->sectnum; g_player[p].ps->cursectnum = s->sectnum;
setsprite(g_player[p].ps->i,s->x,s->y,s->z); setsprite(g_player[p].ps->i,(vec3_t *)s);
P_QuickKill(g_player[p].ps); P_QuickKill(g_player[p].ps);
} }
} }
@ -6018,12 +6060,12 @@ static void G_MoveEffectors(void) //STATNUM 3
{ {
sprite[j].x+=m; sprite[j].x+=m;
sprite[j].y+=x; sprite[j].y+=x;
setsprite(j,sprite[j].x,sprite[j].y,sprite[j].z); setsprite(j,(vec3_t *)&sprite[j]);
} }
j = nextj; j = nextj;
} }
ms(i); ms(i);
setsprite(i,s->x,s->y,s->z); setsprite(i,(vec3_t *)s);
} }
break; break;
@ -6203,7 +6245,7 @@ static void G_MoveEffectors(void) //STATNUM 3
sc->ceilingz += s->zvel; sc->ceilingz += s->zvel;
sector[t[0]].ceilingz += s->zvel; sector[t[0]].ceilingz += s->zvel;
ms(i); ms(i);
setsprite(i,s->x,s->y,s->z); setsprite(i,(vec3_t *)s);
break; break;
@ -6343,7 +6385,7 @@ static void G_MoveEffectors(void) //STATNUM 3
t[2]-=k; t[2]-=k;
t[4]-=k; t[4]-=k;
ms(i); ms(i);
setsprite(i,s->x,s->y,s->z); setsprite(i,(vec3_t *)s);
goto BOLT; goto BOLT;
} }
k = nextspritestat[k]; k = nextspritestat[k];
@ -6354,14 +6396,14 @@ static void G_MoveEffectors(void) //STATNUM 3
t[2]+=k; t[2]+=k;
t[4]+=k; t[4]+=k;
ms(i); ms(i);
setsprite(i,s->x,s->y,s->z); setsprite(i,(vec3_t *)s);
if (t[4] <= -511 || t[4] >= 512) if (t[4] <= -511 || t[4] >= 512)
{ {
t[4] = 0; t[4] = 0;
t[2] &= 0xffffff00; t[2] &= 0xffffff00;
ms(i); ms(i);
setsprite(i,s->x,s->y,s->z); setsprite(i,(vec3_t *)s);
break; break;
} }
} }
@ -6527,7 +6569,7 @@ static void G_MoveEffectors(void) //STATNUM 3
} }
ms(i); ms(i);
setsprite(i,s->x,s->y,s->z); setsprite(i,(vec3_t *)s);
} }
break; break;
@ -6562,7 +6604,7 @@ static void G_MoveEffectors(void) //STATNUM 3
else sc->ceilingz-=512; else sc->ceilingz-=512;
ms(i); ms(i);
setsprite(i,s->x,s->y,s->z); setsprite(i,(vec3_t *)s);
break; break;
@ -6671,7 +6713,7 @@ static void G_MoveEffectors(void) //STATNUM 3
ActorExtra[k].bposz = sprite[k].z; ActorExtra[k].bposz = sprite[k].z;
changespritesect(k,sprite[j].sectnum); changespritesect(k,sprite[j].sectnum);
setsprite(k,sprite[k].x,sprite[k].y,sprite[k].z); setsprite(k,(vec3_t *)&sprite[k]);
ActorExtra[k].floorz = sector[sprite[j].sectnum].floorz; ActorExtra[k].floorz = sector[sprite[j].sectnum].floorz;
ActorExtra[k].ceilingz = sector[sprite[j].sectnum].ceilingz; ActorExtra[k].ceilingz = sector[sprite[j].sectnum].ceilingz;
@ -6889,7 +6931,7 @@ static void G_MoveEffectors(void) //STATNUM 3
{ {
sprite[j].x += x; sprite[j].x += x;
sprite[j].y += l; sprite[j].y += l;
setsprite(j,sprite[j].x,sprite[j].y,sprite[j].z); setsprite(j,(vec3_t *)&sprite[j]);
if (sector[sprite[j].sectnum].floorstat&2) if (sector[sprite[j].sectnum].floorstat&2)
if (sprite[j].statnum == 2) if (sprite[j].statnum == 2)
A_Fall(j); A_Fall(j);
@ -6903,13 +6945,19 @@ static void G_MoveEffectors(void) //STATNUM 3
TRAVERSE_CONNECT(p) TRAVERSE_CONNECT(p)
if (g_player[p].ps->cursectnum == s->sectnum && g_player[p].ps->on_ground) if (g_player[p].ps->cursectnum == s->sectnum && g_player[p].ps->on_ground)
{ {
vec3_t vect;
g_player[p].ps->posx += x; g_player[p].ps->posx += x;
g_player[p].ps->posy += l; g_player[p].ps->posy += l;
g_player[p].ps->oposx = g_player[p].ps->posx; g_player[p].ps->oposx = g_player[p].ps->posx;
g_player[p].ps->oposy = g_player[p].ps->posy; g_player[p].ps->oposy = g_player[p].ps->posy;
setsprite(g_player[p].ps->i,g_player[p].ps->posx,g_player[p].ps->posy,g_player[p].ps->posz+PHEIGHT); vect.x = g_player[p].ps->posx;
vect.y = g_player[p].ps->posy;
vect.z = g_player[p].ps->posz+PHEIGHT;
setsprite(g_player[p].ps->i,&vect);
} }
sc->floorxpanning-=x>>3; sc->floorxpanning-=x>>3;
@ -7024,7 +7072,7 @@ static void G_MoveEffectors(void) //STATNUM 3
sprite[j].x += x>>2; sprite[j].x += x>>2;
sprite[j].y += l>>2; sprite[j].y += l>>2;
setsprite(j,sprite[j].x,sprite[j].y,sprite[j].z); setsprite(j,(vec3_t *)&sprite[j]);
if (sector[sprite[j].sectnum].floorstat&2) if (sector[sprite[j].sectnum].floorstat&2)
if (sprite[j].statnum == 2) if (sprite[j].statnum == 2)
@ -7056,7 +7104,7 @@ static void G_MoveEffectors(void) //STATNUM 3
k = A_Spawn(i,SMALLSMOKE); k = A_Spawn(i,SMALLSMOKE);
sprite[k].xvel = 96+(krand()&127); sprite[k].xvel = 96+(krand()&127);
A_SetSprite(k,CLIPMASK0); A_SetSprite(k,CLIPMASK0);
setsprite(k,sprite[k].x,sprite[k].y,sprite[k].z); setsprite(k,(vec3_t *)&sprite[k]);
if (rnd(16)) if (rnd(16))
A_Spawn(i,EXPLOSION2); A_Spawn(i,EXPLOSION2);
} }
@ -7135,7 +7183,7 @@ static void G_MoveEffectors(void) //STATNUM 3
sprite[j].y += x; sprite[j].y += x;
sprite[j].z += s->zvel; sprite[j].z += s->zvel;
setsprite(j,sprite[j].x,sprite[j].y,sprite[j].z); setsprite(j,(vec3_t *)&sprite[j]);
} }
j = nextj; j = nextj;
} }
@ -7152,7 +7200,7 @@ static void G_MoveEffectors(void) //STATNUM 3
g_player[p].ps->posz += s->zvel; g_player[p].ps->posz += s->zvel;
ms(i); ms(i);
setsprite(i,s->x,s->y,s->z); setsprite(i,(vec3_t *)s);
break; break;

View file

@ -44,7 +44,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include <shellapi.h> #include <shellapi.h>
#endif #endif
#define BUILDDATE " 20090105" #define BUILDDATE " 20090112"
#define VERSION " 1.2.0devel" #define VERSION " 1.2.0devel"
static int32_t floor_over_floor; static int32_t floor_over_floor;
@ -323,7 +323,7 @@ void ExtLoadMap(const char *mapname)
void ExtSaveMap(const char *mapname) void ExtSaveMap(const char *mapname)
{ {
UNREFERENCED_PARAMETER(mapname); UNREFERENCED_PARAMETER(mapname);
saveboard("backup.map",&posx,&posy,&posz,&ang,&cursectnum); saveboard("backup.map",&pos.x,&pos.y,&pos.z,&ang,&cursectnum);
} }
int32_t getTileGroup(const char *groupName) int32_t getTileGroup(const char *groupName)
@ -3091,7 +3091,7 @@ void getnumberptr256(char *namestart, void *num, int32_t bytes, int32_t maxnumbe
if (quitevent) quitevent = 0; if (quitevent) quitevent = 0;
} }
drawrooms(posx,posy,posz,ang,horiz,cursectnum); drawrooms(pos.x,pos.y,pos.z,ang,horiz,cursectnum);
#ifdef SUPERBUILD #ifdef SUPERBUILD
ExtAnalyzeSprites(); ExtAnalyzeSprites();
#endif #endif
@ -3186,28 +3186,28 @@ void getnumberptr256(char *namestart, void *num, int32_t bytes, int32_t maxnumbe
static void DoSpriteOrnament(int32_t i) static void DoSpriteOrnament(int32_t i)
{ {
int32_t j; int32_t j;
int32_t hitx, hity, hitz; hitdata_t hitinfo;
int16_t hitsect, hitwall, hitsprite;
hitscan(sprite[i].x,sprite[i].y,sprite[i].z,sprite[i].sectnum, hitscan((const vec3_t *)&sprite[i],sprite[i].sectnum,
sintable[(sprite[i].ang+2560+1024)&2047], sintable[(sprite[i].ang+2560+1024)&2047],
sintable[(sprite[i].ang+2048+1024)&2047], sintable[(sprite[i].ang+2048+1024)&2047],
0, 0,
&hitsect,&hitwall,&hitsprite,&hitx,&hity,&hitz,CLIPMASK1); &hitinfo,CLIPMASK1);
sprite[i].x = hitx; sprite[i].x = hitinfo.pos.x;
sprite[i].y = hity; sprite[i].y = hitinfo.pos.y;
sprite[i].z = hitz; sprite[i].z = hitinfo.pos.z;
changespritesect(i,hitsect); changespritesect(i,hitinfo.hitsect);
if (hitwall >= 0) if (hitinfo.hitwall >= 0)
sprite[i].ang = ((getangle(wall[wall[hitwall].point2].x-wall[hitwall].x,wall[wall[hitwall].point2].y-wall[hitwall].y)+512)&2047); sprite[i].ang = ((getangle(wall[wall[hitinfo.hitwall].point2].x-wall[hitinfo.hitwall].x,
wall[wall[hitinfo.hitwall].point2].y-wall[hitinfo.hitwall].y)+512)&2047);
//Make sure sprite's in right sector //Make sure sprite's in right sector
if (inside(sprite[i].x,sprite[i].y,sprite[i].sectnum) == 0) if (inside(sprite[i].x,sprite[i].y,sprite[i].sectnum) == 0)
{ {
j = wall[hitwall].point2; j = wall[hitinfo.hitwall].point2;
sprite[i].x -= ksgn(wall[j].y-wall[hitwall].y); sprite[i].x -= ksgn(wall[j].y-wall[hitinfo.hitwall].y);
sprite[i].y += ksgn(wall[j].x-wall[hitwall].x); sprite[i].y += ksgn(wall[j].x-wall[hitinfo.hitwall].x);
} }
} }
@ -3359,7 +3359,7 @@ ENDFOR1:
if (sprite[linebegspr].pal>0) sprite[linebegspr].pal--; if (sprite[linebegspr].pal>0) sprite[linebegspr].pal--;
} }
drawrooms(posx,posy,posz,ang,horiz,cursectnum); drawrooms(pos.x,pos.y,pos.z,ang,horiz,cursectnum);
#ifdef SUPERBUILD #ifdef SUPERBUILD
ExtAnalyzeSprites(); ExtAnalyzeSprites();
#endif #endif
@ -3392,10 +3392,13 @@ ENDFOR1:
} }
j = sp->xrepeat*(hgap+tilesizx[sp->picnum]+2); j = sp->xrepeat*(hgap+tilesizx[sp->picnum]+2);
setsprite(cursor, {
dax + ((j*sintable[daang])>>17), vec3_t vect;
day - ((j*sintable[(daang+512)&2047])>>17), vect.x = dax + ((j*sintable[daang])>>17);
sp->z); vect.y = day - ((j*sintable[(daang+512)&2047])>>17);
vect.z = sp->z;
setsprite(cursor,&vect);
}
if (ch>=33 && ch<=126 && alphabets[alphidx].pic[ch-33] >= 0) if (ch>=33 && ch<=126 && alphabets[alphidx].pic[ch-33] >= 0)
{ {
@ -4000,13 +4003,13 @@ static void Keys3d(void)
noclip = i; noclip = i;
} }
getzrange(posx,posy,posz,cursectnum,&hiz,&hihit,&loz,&lohit,128L,CLIPMASK0); getzrange(&pos,cursectnum,&hiz,&hihit,&loz,&lohit,128L,CLIPMASK0);
if (keystatus[KEYSC_CAPS] || (keystatus[KEYSC_QUOTE] && keystatus[KEYSC_Z])) if (keystatus[KEYSC_CAPS] || (keystatus[KEYSC_QUOTE] && keystatus[KEYSC_Z]))
{ {
zmode++; zmode++;
if (zmode == 3) zmode = 0; if (zmode == 3) zmode = 0;
else if (zmode == 1) zlock = (loz-posz)&0xfffffc00; else if (zmode == 1) zlock = (loz-pos.z)&0xfffffc00;
switch (zmode) switch (zmode)
{ {
case 0: message("Zmode = Gravity");break; case 0: message("Zmode = Gravity");break;
@ -4056,7 +4059,7 @@ static void Keys3d(void)
{ {
sprite[searchwall].cstat &= ~8; sprite[searchwall].cstat &= ~8;
if ((i&64) > 0) if ((i&64) > 0)
if (posz > sprite[searchwall].z) if (pos.z > sprite[searchwall].z)
sprite[searchwall].cstat |= 8; sprite[searchwall].cstat |= 8;
} }
asksave = 1; asksave = 1;
@ -5840,9 +5843,9 @@ static void Keys3d(void)
int16_t cursectnum=sprite[searchwall].sectnum; int16_t cursectnum=sprite[searchwall].sectnum;
xvect = -((mousex*(int32_t)sintable[(ang+2048)&2047])<<3); xvect = -((mousex*(int32_t)sintable[(ang+2048)&2047])<<3);
yvect = -((mousex*(int32_t)sintable[(ang+1536)&2047])<<3); yvect = -((mousex*(int32_t)sintable[(ang+1536)&2047])<<3);
clipmove(&sprite[searchwall].x,&sprite[searchwall].y,&sprite[searchwall].z, clipmove((vec3_t *)&sprite[searchwall],
&cursectnum,xvect,yvect,128L,4L<<8,4L<<8,spnoclip?1:CLIPMASK0); &cursectnum,xvect,yvect,128L,4L<<8,4L<<8,spnoclip?1:CLIPMASK0);
setsprite(searchwall,sprite[searchwall].x,sprite[searchwall].y,sprite[searchwall].z); setsprite(searchwall,(vec3_t *)&sprite[searchwall]);
} }
else else
{ {
@ -5946,9 +5949,9 @@ static void Keys3d(void)
int16_t cursectnum=sprite[searchwall].sectnum; int16_t cursectnum=sprite[searchwall].sectnum;
xvect = -((mousey*(int32_t)sintable[(ang+2560)&2047])<<3); xvect = -((mousey*(int32_t)sintable[(ang+2560)&2047])<<3);
yvect = -((mousey*(int32_t)sintable[(ang+2048)&2047])<<3); yvect = -((mousey*(int32_t)sintable[(ang+2048)&2047])<<3);
clipmove(&sprite[searchwall].x,&sprite[searchwall].y,&sprite[searchwall].z, clipmove((vec3_t *)&sprite[searchwall],
&cursectnum,xvect,yvect,128L,4L<<8,4L<<8,spnoclip?1:CLIPMASK0); &cursectnum,xvect,yvect,128L,4L<<8,4L<<8,spnoclip?1:CLIPMASK0);
setsprite(searchwall,sprite[searchwall].x,sprite[searchwall].y,sprite[searchwall].z); setsprite(searchwall,(vec3_t *)&sprite[searchwall]);
} }
else else
{ {
@ -6562,8 +6565,8 @@ static void DoSpriteSearch(int32_t dir) // <0: backwards, >=0: forwards
} }
// found matching sprite // found matching sprite
posx = sprite[gs_cursprite].x; pos.x = sprite[gs_cursprite].x;
posy = sprite[gs_cursprite].y; pos.y = sprite[gs_cursprite].y;
ang = sprite[gs_cursprite].ang; ang = sprite[gs_cursprite].ang;
printmessage16("%s Sprite seach%s: found sprite %d", dir<0 ? "<" : ">", printmessage16("%s Sprite seach%s: found sprite %d", dir<0 ? "<" : ">",
@ -6965,8 +6968,8 @@ static void Keys2d(void)
(search_hitag!=0 && search_hitag==wall[i].hitag)) (search_hitag!=0 && search_hitag==wall[i].hitag))
) )
{ {
posx=(wall[i].x)-(((wall[i].x)-(wall[wall[i].point2].x))/2); pos.x=(wall[i].x)-(((wall[i].x)-(wall[wall[i].point2].x))/2);
posy=(wall[i].y)-(((wall[i].y)-(wall[wall[i].point2].y))/2); pos.y=(wall[i].y)-(((wall[i].y)-(wall[wall[i].point2].y))/2);
printmessage16("< Wall search: found"); printmessage16("< Wall search: found");
// curwallnum--; // curwallnum--;
keystatus[KEYSC_LBRACK]=0; keystatus[KEYSC_LBRACK]=0;
@ -6995,8 +6998,8 @@ static void Keys2d(void)
(search_hitag!=0 && search_hitag==sprite[i].hitag)) (search_hitag!=0 && search_hitag==sprite[i].hitag))
) )
{ {
posx=sprite[i].x; pos.x=sprite[i].x;
posy=sprite[i].y; pos.y=sprite[i].y;
ang= sprite[i].ang; ang= sprite[i].ang;
printmessage16("< Sprite search: found"); printmessage16("< Sprite search: found");
// curspritenum--; // curspritenum--;
@ -7031,8 +7034,8 @@ static void Keys2d(void)
(search_hitag!=0 && search_hitag==wall[i].hitag)) (search_hitag!=0 && search_hitag==wall[i].hitag))
) )
{ {
posx=(wall[i].x)-(((wall[i].x)-(wall[wall[i].point2].x))/2); pos.x=(wall[i].x)-(((wall[i].x)-(wall[wall[i].point2].x))/2);
posy=(wall[i].y)-(((wall[i].y)-(wall[wall[i].point2].y))/2); pos.y=(wall[i].y)-(((wall[i].y)-(wall[wall[i].point2].y))/2);
printmessage16("> Wall search: found"); printmessage16("> Wall search: found");
// curwallnum++; // curwallnum++;
keystatus[KEYSC_RBRACK]=0; keystatus[KEYSC_RBRACK]=0;
@ -7058,8 +7061,8 @@ static void Keys2d(void)
(search_hitag!=0 && search_hitag==sprite[i].hitag)) (search_hitag!=0 && search_hitag==sprite[i].hitag))
) )
{ {
posx=sprite[i].x; pos.x=sprite[i].x;
posy=sprite[i].y; pos.y=sprite[i].y;
ang= sprite[i].ang; ang= sprite[i].ang;
printmessage16("> Sprite search: found"); printmessage16("> Sprite search: found");
// curspritenum++; // curspritenum++;
@ -7195,7 +7198,7 @@ static void Keys2d(void)
{ {
editstatus = 0; editstatus = 0;
zmode = 2; zmode = 2;
posz = ((sector[cursectnum].ceilingz+sector[cursectnum].floorz)>>1); pos.z = ((sector[cursectnum].ceilingz+sector[cursectnum].floorz)>>1);
} }
else else
{ {
@ -7229,9 +7232,9 @@ static void Keys2d(void)
if (keystatus[KEYSC_QUOTE] && keystatus[KEYSC_J]) // ' J if (keystatus[KEYSC_QUOTE] && keystatus[KEYSC_J]) // ' J
{ {
posx=getnumber16("X-coordinate: ",posx,131072L,1); pos.x=getnumber16("X-coordinate: ",pos.x,131072L,1);
posy=getnumber16("Y-coordinate: ",posy,131072L,1); pos.y=getnumber16("Y-coordinate: ",pos.y,131072L,1);
Bsprintf(tempbuf,"Current pos now (%d, %d)",posx,posy); Bsprintf(tempbuf,"Current pos now (%d, %d)",pos.x,pos.y);
printmessage16(tempbuf); printmessage16(tempbuf);
keystatus[KEYSC_J]=0; keystatus[KEYSC_J]=0;
} }
@ -8802,7 +8805,7 @@ void ExtPreCheckKeys(void) // just before drawrooms
} }
} }
} }
if (floor_over_floor) SE40Code(posx,posy,posz,ang,horiz); if (floor_over_floor) SE40Code(pos.x,pos.y,pos.z,ang,horiz);
if (purpleon) clearview(255); if (purpleon) clearview(255);
if (sidemode != 0) if (sidemode != 0)
{ {
@ -8882,7 +8885,7 @@ void ExtPreCheckKeys(void) // just before drawrooms
if (frames!=0) if (frames!=0)
{ {
if (frames==10) frames=0; if (frames==10) frames=0;
k = 1536;//getangle(tspr->x-posx,tspr->y-posy); k = 1536;//getangle(tspr->x-pos.x,tspr->y-pos.y);
k = (((sprite[i].ang+3072+128-k)&2047)>>8)&7; k = (((sprite[i].ang+3072+128-k)&2047)>>8)&7;
//This guy has only 5 pictures for 8 angles (3 are x-flipped) //This guy has only 5 pictures for 8 angles (3 are x-flipped)
if (k <= 4) if (k <= 4)
@ -8915,8 +8918,8 @@ void ExtPreCheckKeys(void) // just before drawrooms
} }
xp1 = mulscale14(sprite[i].x-posx,zoom); xp1 = mulscale14(sprite[i].x-pos.x,zoom);
yp1 = mulscale14(sprite[i].y-posy-(tilesizy[picnum]<<2),zoom); yp1 = mulscale14(sprite[i].y-pos.y-(tilesizy[picnum]<<2),zoom);
if (i+16384 != pointhighlight || !(totalclock&32)) if (i+16384 != pointhighlight || !(totalclock&32))
{ {
shade = sprite[i].shade; shade = sprite[i].shade;
@ -8937,8 +8940,8 @@ void ExtPreCheckKeys(void) // just before drawrooms
for (i=0;i<numsprites;i++) for (i=0;i<numsprites;i++)
if (sprite[i].picnum == 5 /*&& zoom >= 256*/ && sprite[i].sectnum != MAXSECTORS) if (sprite[i].picnum == 5 /*&& zoom >= 256*/ && sprite[i].sectnum != MAXSECTORS)
{ {
xp1 = mulscale14(sprite[i].x-posx,zoom); xp1 = mulscale14(sprite[i].x-pos.x,zoom);
yp1 = mulscale14(sprite[i].y-posy,zoom); yp1 = mulscale14(sprite[i].y-pos.y,zoom);
radius = mulscale14(sprite[i].hitag,zoom); radius = mulscale14(sprite[i].hitag,zoom);
col = 6; col = 6;
@ -9059,7 +9062,7 @@ void ExtAnalyzeSprites(void)
if (frames!=0) if (frames!=0)
{ {
if (frames==10) frames=0; if (frames==10) frames=0;
k = getangle(tspr->x-posx,tspr->y-posy); k = getangle(tspr->x-pos.x,tspr->y-pos.y);
k = (((tspr->ang+3072+128-k)&2047)>>8)&7; k = (((tspr->ang+3072+128-k)&2047)>>8)&7;
//This guy has only 5 pictures for 8 angles (3 are x-flipped) //This guy has only 5 pictures for 8 angles (3 are x-flipped)
if (k <= 4) if (k <= 4)
@ -9162,7 +9165,7 @@ static void Keys2d3d(void)
keystatus[KEYSC_P] = 0; keystatus[KEYSC_P] = 0;
if (!eitherALT) if (!eitherALT)
updatesector(posx, posy, &cursectnum); updatesector(pos.x, pos.y, &cursectnum);
else else
updatesector(startposx, startposy, &startsectnum); updatesector(startposx, startposy, &startsectnum);
@ -9225,7 +9228,7 @@ static void Keys2d3d(void)
if (eitherALT) if (eitherALT)
saveboard("autosave.map",&startposx,&startposy,&startposz,&startang,&startsectnum); saveboard("autosave.map",&startposx,&startposy,&startposz,&startang,&startsectnum);
else else
saveboard("autosave.map",&posx,&posy,&posz,&ang,&cursectnum); saveboard("autosave.map",&pos.x,&pos.y,&pos.z,&ang,&cursectnum);
message("Board saved to AUTOSAVE.MAP. Starting the game..."); message("Board saved to AUTOSAVE.MAP. Starting the game...");
uninitmouse(); uninitmouse();
@ -9284,7 +9287,7 @@ static void Keys2d3d(void)
if (totalclock < (lastsave + 120*10) || !AskIfSure("Are you sure you want to load the last saved map?")) if (totalclock < (lastsave + 120*10) || !AskIfSure("Are you sure you want to load the last saved map?"))
{ {
int32_t sposx=posx,sposy=posy,sposz=posz,sang=ang; int32_t sposx=pos.x,sposy=pos.y,sposz=pos.z,sang=ang;
lastsave=totalclock; lastsave=totalclock;
highlightcnt = -1; highlightcnt = -1;
@ -9299,9 +9302,9 @@ static void Keys2d3d(void)
for (i=MAXSPRITES-1;i>=0;i--) sprite[i].extra = -1; for (i=MAXSPRITES-1;i>=0;i--) sprite[i].extra = -1;
ExtPreLoadMap(); ExtPreLoadMap();
i = loadboard(f,(!pathsearchmode&&grponlymode?2:0),&posx,&posy,&posz,&ang,&cursectnum); i = loadboard(f,(!pathsearchmode&&grponlymode?2:0),&pos.x,&pos.y,&pos.z,&ang,&cursectnum);
loadmhk(); loadmhk();
if (i == -2) i = loadoldboard(f,(!pathsearchmode&&grponlymode?2:0),&posx,&posy,&posz,&ang,&cursectnum); if (i == -2) i = loadoldboard(f,(!pathsearchmode&&grponlymode?2:0),&pos.x,&pos.y,&pos.z,&ang,&cursectnum);
if (i < 0) printmessage16("Invalid map format."); if (i < 0) printmessage16("Invalid map format.");
else else
{ {
@ -9310,12 +9313,12 @@ static void Keys2d3d(void)
else message("Map %s loaded successfully",f); else message("Map %s loaded successfully",f);
} }
updatenumsprites(); updatenumsprites();
startposx = posx; startposx = pos.x;
startposy = posy; startposy = pos.y;
startposz = posz; startposz = pos.z;
startang = ang; startang = ang;
startsectnum = cursectnum; startsectnum = cursectnum;
posx=sposx;posy=sposy;posz=sposz;ang=sang; pos.x=sposx;pos.y=sposy;pos.z=sposz;ang=sang;
keystatus[KEYSC_L]=0; keystatus[KEYSC_L]=0;
} }
} }
@ -9468,11 +9471,12 @@ void faketimerhandler(void)
return; return;
ototalclock = totalclock; ototalclock = totalclock;
oposx = posx; oposx = pos.x;
oposy = posy; oposy = pos.y;
hitwall = clipmove(&posx,&posy,&posz,&cursectnum,xvel,yvel,128L,4L<<8,4L<<8,0);
xvel = ((posx-oposx)<<14); hitwall = clipmove(&pos,&cursectnum,xvel,yvel,128L,4L<<8,4L<<8,0);
yvel = ((posy-oposy)<<14); xvel = ((pos.x-oposx)<<14);
yvel = ((pos.y-oposy)<<14);
yvel += 80000; yvel += 80000;
if ((hitwall&0xc000) == 32768) if ((hitwall&0xc000) == 32768)
@ -9506,18 +9510,18 @@ void faketimerhandler(void)
ang = ((ang+((timoff+32-ototalclock)>>4))&2047); ang = ((ang+((timoff+32-ototalclock)>>4))&2047);
} }
getzrange(posx,posy,posz,cursectnum,&hiz,&hihit,&loz,&lohit,128L,0); getzrange(&pos,cursectnum,&hiz,&hihit,&loz,&lohit,128L,0);
oposx -= posx; oposx -= pos.x;
oposy -= posy; oposy -= pos.y;
dist = ksqrt(oposx*oposx+oposy*oposy); dist = ksqrt(oposx*oposx+oposy*oposy);
if (ototalclock > timoff+32) dist = 0; if (ototalclock > timoff+32) dist = 0;
daang = mulscale(dist,angvel,9); daang = mulscale(dist,angvel,9);
posz += (daang<<6); pos.z += (daang<<6);
if (posz > loz-(4<<8)) posz = loz-(4<<8), hvel = 0; if (pos.z > loz-(4<<8)) pos.z = loz-(4<<8), hvel = 0;
if (posz < hiz+(4<<8)) posz = hiz+(4<<8), hvel = 0; if (pos.z < hiz+(4<<8)) pos.z = hiz+(4<<8), hvel = 0;
horiz = ((horiz*7+(100-(daang>>1)))>>3); horiz = ((horiz*7+(100-(daang>>1)))>>3);
if (horiz < 100) horiz++; if (horiz < 100) horiz++;
@ -9572,8 +9576,8 @@ static void SearchSectorsForward()
{ {
if (sector[ii].lotag==cursector_lotag) if (sector[ii].lotag==cursector_lotag)
{ {
posx=wall[sector[ii].wallptr].x; pos.x=wall[sector[ii].wallptr].x;
posy=wall[sector[ii].wallptr].y; pos.y=wall[sector[ii].wallptr].y;
printmessage16("> Sector search: found"); printmessage16("> Sector search: found");
// cursectornum++; // cursectornum++;
keystatus[KEYSC_RBRACK]=0; // ] keystatus[KEYSC_RBRACK]=0; // ]
@ -9595,8 +9599,8 @@ static void SearchSectorsBackward()
{ {
if (sector[ii].lotag==cursector_lotag) if (sector[ii].lotag==cursector_lotag)
{ {
posx=wall[sector[ii].wallptr].x; pos.x=wall[sector[ii].wallptr].x;
posy=wall[sector[ii].wallptr].y; pos.y=wall[sector[ii].wallptr].y;
printmessage16("< Sector search: found"); printmessage16("< Sector search: found");
// cursectornum--; // cursectornum--;
keystatus[KEYSC_LBRACK]=0; // [ keystatus[KEYSC_LBRACK]=0; // [

View file

@ -368,6 +368,7 @@ typedef struct {
} config_t; } config_t;
typedef struct { typedef struct {
int32_t camerax,cameray,cameraz;
int32_t const_visibility,uw_framerate; int32_t const_visibility,uw_framerate;
int32_t camera_time,folfvel,folavel,folx,foly,fola; int32_t camera_time,folfvel,folavel,folx,foly,fola;
int32_t reccnt,crosshairscale; int32_t reccnt,crosshairscale;
@ -386,7 +387,6 @@ typedef struct {
int32_t m_ffire,ffire,m_player_skill,m_level_number,m_volume_number,multimode; int32_t m_ffire,ffire,m_player_skill,m_level_number,m_volume_number,multimode;
int32_t player_skill,level_number,volume_number,m_marker,marker,mouseflip; int32_t player_skill,level_number,volume_number,m_marker,marker,mouseflip;
int32_t camerax,cameray,cameraz;
int32_t configversion; int32_t configversion;
int16_t cameraang, camerasect, camerahoriz; int16_t cameraang, camerasect, camerahoriz;
@ -420,13 +420,13 @@ extern int32_t fricxv,fricyv;
// mywhatever type globals // mywhatever type globals
typedef struct { typedef struct {
int32_t zoom, exitx, exity;
int32_t posx, posy, posz, horiz, ohoriz, ohorizoff, invdisptime; int32_t posx, posy, posz, horiz, ohoriz, ohorizoff, invdisptime;
int32_t bobposx, bobposy, oposx, oposy, oposz, pyoff, opyoff; int32_t bobposx, bobposy, oposx, oposy, oposz, pyoff, opyoff;
int32_t posxv, posyv, poszv, last_pissed_time, truefz, truecz; int32_t posxv, posyv, poszv, last_pissed_time, truefz, truecz;
int32_t player_par, visibility; int32_t player_par, visibility;
int32_t bobcounter, weapon_sway; int32_t bobcounter, weapon_sway;
int32_t pals_time, randomflamex, crack_time; int32_t pals_time, randomflamex, crack_time;
int32_t zoom, exitx, exity;
uint32_t interface_toggle_flag; uint32_t interface_toggle_flag;
@ -574,10 +574,6 @@ extern int32_t movefifoplc, vel,svel,angvel,horiz;
extern int16_t g_mirrorWall[64], g_mirrorSector[64], g_mirrorCount; extern int16_t g_mirrorWall[64], g_mirrorSector[64], g_mirrorCount;
typedef struct {
int32_t x, y, z;
} vec3_t;
#include "funct.h" #include "funct.h"
extern int32_t g_screenCapture; extern int32_t g_screenCapture;
@ -630,7 +626,8 @@ extern int32_t g_networkBroadcastMode;
extern char lumplockbyte[11]; extern char lumplockbyte[11];
//DUKE3D.H - replace the end "my's" with this //DUKE3D.H - replace the end "my's" with this
extern int32_t myx, omyx, myxvel, myy, omyy, myyvel, myz, omyz, myzvel; extern vec3_t my;
extern vec3_t my, omy, myvel;
extern int16_t myhoriz, omyhoriz, myhorizoff, omyhorizoff, g_skillSoundID; extern int16_t myhoriz, omyhoriz, myhorizoff, omyhorizoff, g_skillSoundID;
extern int16_t myang, omyang, mycursectnum, myjumpingcounter; extern int16_t myang, omyang, mycursectnum, myjumpingcounter;
extern char myjumpingtoggle, myonground, myhardlanding,myreturntocenter; extern char myjumpingtoggle, myonground, myhardlanding,myreturntocenter;

View file

@ -56,7 +56,7 @@ extern int32_t G_CheckActivatorMotion(int32_t lotag);
extern int32_t CheckDoorTile(int32_t dapic); extern int32_t CheckDoorTile(int32_t dapic);
extern int32_t isanunderoperator(int32_t lotag); extern int32_t isanunderoperator(int32_t lotag);
extern int32_t isanearoperator(int32_t lotag); extern int32_t isanearoperator(int32_t lotag);
extern inline int32_t CheckPlayerInSector(int32_t sect); extern inline int32_t G_CheckPlayerInSector(int32_t sect);
extern int32_t ldist(spritetype *s1,spritetype *s2); extern int32_t ldist(spritetype *s1,spritetype *s2);
extern int32_t dist(spritetype *s1,spritetype *s2); extern int32_t dist(spritetype *s1,spritetype *s2);
extern int32_t __fastcall A_FindPlayer(spritetype *s,int32_t *d); extern int32_t __fastcall A_FindPlayer(spritetype *s,int32_t *d);

View file

@ -3742,8 +3742,8 @@ void G_DisplayRest(int32_t smoothratio)
{ {
if (screenpeek == myconnectindex && numplayers > 1) if (screenpeek == myconnectindex && numplayers > 1)
{ {
cposx = omyx+mulscale16((int32_t)(myx-omyx),smoothratio); cposx = omy.x+mulscale16((int32_t)(my.x-omy.x),smoothratio);
cposy = omyy+mulscale16((int32_t)(myy-omyy),smoothratio); cposy = omy.y+mulscale16((int32_t)(my.y-omy.y),smoothratio);
cang = omyang+mulscale16((int32_t)(((myang+1024-omyang)&2047)-1024),smoothratio); cang = omyang+mulscale16((int32_t)(((myang+1024-omyang)&2047)-1024),smoothratio);
} }
else else
@ -3954,20 +3954,21 @@ void G_DisplayRest(int32_t smoothratio)
G_FadePalette(tempTint.r,tempTint.g,tempTint.b,tempTint.f|128); G_FadePalette(tempTint.r,tempTint.g,tempTint.b,tempTint.f|128);
} }
static void G_DoThirdPerson(DukePlayer_t *pp, int32_t *vx, int32_t *vy,int32_t *vz,int16_t *vsectnum, int32_t ang, int32_t horiz) static void G_DoThirdPerson(DukePlayer_t *pp, vec3_t *vect,int16_t *vsectnum, int32_t ang, int32_t horiz)
{ {
spritetype *sp = &sprite[pp->i]; spritetype *sp = &sprite[pp->i];
int32_t i, hx, hy, hitx, hity, hitz; int32_t i, hx, hy;
int32_t nx = (sintable[(ang+1536)&2047]>>4); int32_t nx = (sintable[(ang+1536)&2047]>>4);
int32_t ny = (sintable[(ang+1024)&2047]>>4); int32_t ny = (sintable[(ang+1024)&2047]>>4);
int32_t nz = (horiz-100)*128; int32_t nz = (horiz-100)*128;
int16_t hitsect, hitwall, hitsprite, daang; int16_t daang;
int16_t bakcstat = sp->cstat; int16_t bakcstat = sp->cstat;
hitdata_t hitinfo;
sp->cstat &= (int16_t)~0x101; sp->cstat &= (int16_t)~0x101;
updatesectorz(*vx,*vy,*vz,vsectnum); updatesectorz(vect->x,vect->y,vect->z,vsectnum);
hitscan(*vx,*vy,*vz,*vsectnum,nx,ny,nz,&hitsect,&hitwall,&hitsprite,&hitx,&hity,&hitz,CLIPMASK1); hitscan((const vec3_t *)&vect,*vsectnum,nx,ny,nz,&hitinfo,CLIPMASK1);
if (*vsectnum < 0) if (*vsectnum < 0)
{ {
@ -3975,21 +3976,21 @@ static void G_DoThirdPerson(DukePlayer_t *pp, int32_t *vx, int32_t *vy,int32_t *
return; return;
} }
hx = hitx-(*vx); hx = hitinfo.pos.x-(vect->x);
hy = hity-(*vy); hy = hitinfo.pos.y-(vect->y);
if (klabs(nx)+klabs(ny) > klabs(hx)+klabs(hy)) if (klabs(nx)+klabs(ny) > klabs(hx)+klabs(hy))
{ {
*vsectnum = hitsect; *vsectnum = hitinfo.hitsect;
if (hitwall >= 0) if (hitinfo.hitwall >= 0)
{ {
daang = getangle(wall[wall[hitwall].point2].x-wall[hitwall].x, daang = getangle(wall[wall[hitinfo.hitwall].point2].x-wall[hitinfo.hitwall].x,
wall[wall[hitwall].point2].y-wall[hitwall].y); wall[wall[hitinfo.hitwall].point2].y-wall[hitinfo.hitwall].y);
i = nx*sintable[daang]+ny*sintable[(daang+1536)&2047]; i = nx*sintable[daang]+ny*sintable[(daang+1536)&2047];
if (klabs(nx) > klabs(ny)) hx -= mulscale28(nx,i); if (klabs(nx) > klabs(ny)) hx -= mulscale28(nx,i);
else hy -= mulscale28(ny,i); else hy -= mulscale28(ny,i);
} }
else if (hitsprite < 0) else if (hitinfo.hitsprite < 0)
{ {
if (klabs(nx) > klabs(ny)) hx -= (nx>>5); if (klabs(nx) > klabs(ny)) hx -= (nx>>5);
else hy -= (ny>>5); else hy -= (ny>>5);
@ -3998,14 +3999,14 @@ static void G_DoThirdPerson(DukePlayer_t *pp, int32_t *vx, int32_t *vy,int32_t *
else i = divscale16(hy,ny); else i = divscale16(hy,ny);
if (i < g_cameraDistance) g_cameraDistance = i; if (i < g_cameraDistance) g_cameraDistance = i;
} }
*vx = (*vx)+mulscale16(nx,g_cameraDistance); vect->x = (vect->x)+mulscale16(nx,g_cameraDistance);
*vy = (*vy)+mulscale16(ny,g_cameraDistance); vect->y = (vect->y)+mulscale16(ny,g_cameraDistance);
*vz = (*vz)+mulscale16(nz,g_cameraDistance); vect->z = (vect->z)+mulscale16(nz,g_cameraDistance);
g_cameraDistance = min(g_cameraDistance+((totalclock-g_cameraClock)<<10),65536); g_cameraDistance = min(g_cameraDistance+((totalclock-g_cameraClock)<<10),65536);
g_cameraClock = totalclock; g_cameraClock = totalclock;
updatesectorz(*vx,*vy,*vz,vsectnum); updatesectorz(vect->x,vect->y,vect->z,vsectnum);
sp->cstat = bakcstat; sp->cstat = bakcstat;
} }
@ -4459,9 +4460,9 @@ void G_DrawRooms(int32_t snum,int32_t smoothratio)
if ((snum == myconnectindex) && (numplayers > 1)) if ((snum == myconnectindex) && (numplayers > 1))
{ {
ud.camerax = omyx+mulscale16((int32_t)(myx-omyx),smoothratio); ud.camerax = omy.x+mulscale16((int32_t)(my.x-omy.x),smoothratio);
ud.cameray = omyy+mulscale16((int32_t)(myy-omyy),smoothratio); ud.cameray = omy.y+mulscale16((int32_t)(my.y-omy.y),smoothratio);
ud.cameraz = omyz+mulscale16((int32_t)(myz-omyz),smoothratio); ud.cameraz = omy.z+mulscale16((int32_t)(my.z-omy.z),smoothratio);
ud.cameraang = omyang+mulscale16((int32_t)(((myang+1024-omyang)&2047)-1024),smoothratio); ud.cameraang = omyang+mulscale16((int32_t)(((myang+1024-omyang)&2047)-1024),smoothratio);
ud.camerahoriz = omyhoriz+omyhorizoff+mulscale16((int32_t)(myhoriz+myhorizoff-omyhoriz-omyhorizoff),smoothratio); ud.camerahoriz = omyhoriz+omyhorizoff+mulscale16((int32_t)(myhoriz+myhorizoff-omyhoriz-omyhorizoff),smoothratio);
ud.camerasect = mycursectnum; ud.camerasect = mycursectnum;
@ -4491,7 +4492,7 @@ void G_DrawRooms(int32_t snum,int32_t smoothratio)
if (ud.viewbob) if (ud.viewbob)
ud.cameraz += p->opyoff+mulscale16((int32_t)(p->pyoff-p->opyoff),smoothratio); ud.cameraz += p->opyoff+mulscale16((int32_t)(p->pyoff-p->opyoff),smoothratio);
} }
else G_DoThirdPerson(p,&ud.camerax,&ud.cameray,&ud.cameraz,&ud.camerasect,ud.cameraang,ud.camerahoriz); else G_DoThirdPerson(p,(vec3_t *)&ud,&ud.camerasect,ud.cameraang,ud.camerahoriz);
cz = ActorExtra[p->i].ceilingz; cz = ActorExtra[p->i].ceilingz;
fz = ActorExtra[p->i].floorz; fz = ActorExtra[p->i].floorz;
@ -4960,7 +4961,7 @@ int32_t A_Spawn(int32_t j, int32_t pn)
case WATERSPLASH2__STATIC: case WATERSPLASH2__STATIC:
if (j >= 0) if (j >= 0)
{ {
setsprite(i,sprite[j].x,sprite[j].y,sprite[j].z); setsprite(i,(vec3_t *)&sprite[j]);
sp->xrepeat = sp->yrepeat = 8+(krand()&7); sp->xrepeat = sp->yrepeat = 8+(krand()&7);
} }
else sp->xrepeat = sp->yrepeat = 16+(krand()&15); else sp->xrepeat = sp->yrepeat = 16+(krand()&15);
@ -5054,7 +5055,7 @@ int32_t A_Spawn(int32_t j, int32_t pn)
sp->xvel = 128; sp->xvel = 128;
changespritestat(i,5); changespritestat(i,5);
A_SetSprite(i,CLIPMASK0); A_SetSprite(i,CLIPMASK0);
setsprite(i,sp->x,sp->y,sp->z); setsprite(i,(vec3_t *)sp);
break; break;
case FRAMEEFFECT1_13__STATIC: case FRAMEEFFECT1_13__STATIC:
@ -5672,7 +5673,7 @@ int32_t A_Spawn(int32_t j, int32_t pn)
sprite[s].z = sp->z; sprite[s].z = sp->z;
sprite[s].shade = sp->shade; sprite[s].shade = sp->shade;
setsprite(s,sprite[s].x,sprite[s].y,sprite[s].z); setsprite(s,(vec3_t *)&sprite[s]);
break; break;
} }
s = nextspritestat[s]; s = nextspritestat[s];
@ -7044,9 +7045,9 @@ void G_DoSpriteAnimations(int32_t x,int32_t y,int32_t a,int32_t smoothratio)
t->cstat |= 2; t->cstat |= 2;
if (screenpeek == myconnectindex && numplayers >= 2) if (screenpeek == myconnectindex && numplayers >= 2)
{ {
t->x = omyx+mulscale16((int32_t)(myx-omyx),smoothratio); t->x = omy.x+mulscale16((int32_t)(my.x-omy.x),smoothratio);
t->y = omyy+mulscale16((int32_t)(myy-omyy),smoothratio); t->y = omy.y+mulscale16((int32_t)(my.y-omy.y),smoothratio);
t->z = omyz+mulscale16((int32_t)(myz-omyz),smoothratio)+(40<<8); t->z = omy.z+mulscale16((int32_t)(my.z-omy.z),smoothratio)+(40<<8);
t->ang = omyang+mulscale16((int32_t)(((myang+1024-omyang)&2047)-1024),smoothratio); t->ang = omyang+mulscale16((int32_t)(((myang+1024-omyang)&2047)-1024),smoothratio);
t->sectnum = mycursectnum; t->sectnum = mycursectnum;
} }
@ -12074,15 +12075,15 @@ static void Net_CorrectPrediction(void)
if (p->posx == myxbak[i] && p->posy == myybak[i] && p->posz == myzbak[i] if (p->posx == myxbak[i] && p->posy == myybak[i] && p->posz == myzbak[i]
&& p->horiz == myhorizbak[i] && p->ang == myangbak[i]) return; && p->horiz == myhorizbak[i] && p->ang == myangbak[i]) return;
myx = p->posx; my.x = p->posx;
omyx = p->oposx; omy.x = p->oposx;
myxvel = p->posxv; myvel.x = p->posxv;
myy = p->posy; my.y = p->posy;
omyy = p->oposy; omy.y = p->oposy;
myyvel = p->posyv; myvel.y = p->posyv;
myz = p->posz; my.z = p->posz;
omyz = p->oposz; omy.z = p->oposz;
myzvel = p->poszv; myvel.z = p->poszv;
myang = p->ang; myang = p->ang;
omyang = p->oang; omyang = p->oang;
mycursectnum = p->cursectnum; mycursectnum = p->cursectnum;
@ -12127,31 +12128,31 @@ static void Net_DoPrediction(void)
if (ud.clipping == 0 && (sector[psect].floorpicnum == MIRROR || psect < 0 || psect >= MAXSECTORS)) if (ud.clipping == 0 && (sector[psect].floorpicnum == MIRROR || psect < 0 || psect >= MAXSECTORS))
{ {
myx = omyx; my.x = omy.x;
myy = omyy; my.y = omy.y;
} }
else else
{ {
omyx = myx; omy.x = my.x;
omyy = myy; omy.y = my.y;
} }
omyhoriz = myhoriz; omyhoriz = myhoriz;
omyhorizoff = myhorizoff; omyhorizoff = myhorizoff;
omyz = myz; omy.z = my.z;
omyang = myang; omyang = myang;
getzrange(myx,myy,myz,psect,&cz,&hz,&fz,&lz,163L,CLIPMASK0); getzrange(&my,psect,&cz,&hz,&fz,&lz,163L,CLIPMASK0);
j = getflorzofslope(psect,myx,myy); j = getflorzofslope(psect,my.x,my.y);
if ((lz&49152) == 16384 && psectlotag == 1 && klabs(myz-j) > PHEIGHT+(16<<8)) if ((lz&49152) == 16384 && psectlotag == 1 && klabs(my.z-j) > PHEIGHT+(16<<8))
psectlotag = 0; psectlotag = 0;
if (p->aim_mode == 0 && myonground && psectlotag != 2 && (sector[psect].floorstat&2)) if (p->aim_mode == 0 && myonground && psectlotag != 2 && (sector[psect].floorstat&2))
{ {
x = myx+(sintable[(myang+512)&2047]>>5); x = my.x+(sintable[(myang+512)&2047]>>5);
y = myy+(sintable[myang&2047]>>5); y = my.y+(sintable[myang&2047]>>5);
tempsect = psect; tempsect = psect;
updatesector(x,y,&tempsect); updatesector(x,y,&tempsect);
if (tempsect >= 0) if (tempsect >= 0)
@ -12172,7 +12173,7 @@ static void Net_DoPrediction(void)
if (sprite[hz].statnum == 1 && sprite[hz].extra >= 0) if (sprite[hz].statnum == 1 && sprite[hz].extra >= 0)
{ {
hz = 0; hz = 0;
cz = getceilzofslope(psect,myx,myy); cz = getceilzofslope(psect,my.x,my.y);
} }
} }
@ -12186,9 +12187,9 @@ static void Net_DoPrediction(void)
} }
if (A_CheckEnemySprite(&sprite[j]) && sprite[j].xrepeat > 24 && klabs(sprite[p->i].z-sprite[j].z) < (84<<8)) if (A_CheckEnemySprite(&sprite[j]) && sprite[j].xrepeat > 24 && klabs(sprite[p->i].z-sprite[j].z) < (84<<8))
{ {
j = getangle(sprite[j].x-myx,sprite[j].y-myy); j = getangle(sprite[j].x-my.x,sprite[j].y-my.y);
myxvel -= sintable[(j+512)&2047]<<4; myvel.x -= sintable[(j+512)&2047]<<4;
myyvel -= sintable[j&2047]<<4; myvel.y -= sintable[j&2047]<<4;
} }
} }
@ -12198,14 +12199,14 @@ static void Net_DoPrediction(void)
{ {
if (p->on_warping_sector == 0) if (p->on_warping_sector == 0)
{ {
if (klabs(myz-fz) > (PHEIGHT>>1)) if (klabs(my.z-fz) > (PHEIGHT>>1))
myz += 348; my.z += 348;
} }
clipmove(&myx,&myy,&myz,&mycursectnum,0,0,164L,(4L<<8),(4L<<8),CLIPMASK0); clipmove(&my,&mycursectnum,0,0,164L,(4L<<8),(4L<<8),CLIPMASK0);
} }
updatesector(myx,myy,&mycursectnum); updatesector(my.x,my.y,&mycursectnum);
pushmove(&myx,&myy,&myz,&mycursectnum,128L,(4L<<8),(20L<<8),CLIPMASK0); pushmove(&my,&mycursectnum,128L,(4L<<8),(20L<<8),CLIPMASK0);
myhoriz = 100; myhoriz = 100;
myhorizoff = 0; myhorizoff = 0;
@ -12227,43 +12228,43 @@ static void Net_DoPrediction(void)
if (TEST_SYNC_KEY(sb_snum, SK_JUMP)) if (TEST_SYNC_KEY(sb_snum, SK_JUMP))
{ {
if (myzvel > 0) myzvel = 0; if (myvel.z > 0) myvel.z = 0;
myzvel -= 348; myvel.z -= 348;
if (myzvel < -(256*6)) myzvel = -(256*6); if (myvel.z < -(256*6)) myvel.z = -(256*6);
} }
else if (TEST_SYNC_KEY(sb_snum, SK_CROUCH)) else if (TEST_SYNC_KEY(sb_snum, SK_CROUCH))
{ {
if (myzvel < 0) myzvel = 0; if (myvel.z < 0) myvel.z = 0;
myzvel += 348; myvel.z += 348;
if (myzvel > (256*6)) myzvel = (256*6); if (myvel.z > (256*6)) myvel.z = (256*6);
} }
else else
{ {
if (myzvel < 0) if (myvel.z < 0)
{ {
myzvel += 256; myvel.z += 256;
if (myzvel > 0) if (myvel.z > 0)
myzvel = 0; myvel.z = 0;
} }
if (myzvel > 0) if (myvel.z > 0)
{ {
myzvel -= 256; myvel.z -= 256;
if (myzvel < 0) if (myvel.z < 0)
myzvel = 0; myvel.z = 0;
} }
} }
if (myzvel > 2048) myzvel >>= 1; if (myvel.z > 2048) myvel.z >>= 1;
myz += myzvel; my.z += myvel.z;
if (myz > (fz-(15<<8))) if (my.z > (fz-(15<<8)))
myz += ((fz-(15<<8))-myz)>>1; my.z += ((fz-(15<<8))-my.z)>>1;
if (myz < (cz+(4<<8))) if (my.z < (cz+(4<<8)))
{ {
myz = cz+(4<<8); my.z = cz+(4<<8);
myzvel = 0; myvel.z = 0;
} }
} }
@ -12274,23 +12275,23 @@ static void Net_DoPrediction(void)
myhardlanding = 0; myhardlanding = 0;
if (p->jetpack_on < 11) if (p->jetpack_on < 11)
myz -= (p->jetpack_on<<7); //Goin up my.z -= (p->jetpack_on<<7); //Goin up
if (shrunk) j = 512; if (shrunk) j = 512;
else j = 2048; else j = 2048;
if (TEST_SYNC_KEY(sb_snum, SK_JUMP)) //A if (TEST_SYNC_KEY(sb_snum, SK_JUMP)) //A
myz -= j; my.z -= j;
if (TEST_SYNC_KEY(sb_snum, SK_CROUCH)) //Z if (TEST_SYNC_KEY(sb_snum, SK_CROUCH)) //Z
myz += j; my.z += j;
if (shrunk == 0 && (psectlotag == 0 || psectlotag == 2)) k = 32; if (shrunk == 0 && (psectlotag == 0 || psectlotag == 2)) k = 32;
else k = 16; else k = 16;
if (myz > (fz-(k<<8))) if (my.z > (fz-(k<<8)))
myz += ((fz-(k<<8))-myz)>>1; my.z += ((fz-(k<<8))-my.z)>>1;
if (myz < (cz+(18<<8))) if (my.z < (cz+(18<<8)))
myz = cz+(18<<8); my.z = cz+(18<<8);
} }
else if (psectlotag != 2) else if (psectlotag != 2)
{ {
@ -12299,49 +12300,49 @@ static void Net_DoPrediction(void)
if (shrunk == 0) i = 34; if (shrunk == 0) i = 34;
else i = 12; else i = 12;
} }
if (myz < (fz-(i<<8)) && (G_CheckForSpaceFloor(psect)|G_CheckForSpaceCeiling(psect)) == 0) //falling if (my.z < (fz-(i<<8)) && (G_CheckForSpaceFloor(psect)|G_CheckForSpaceCeiling(psect)) == 0) //falling
{ {
if (!TEST_SYNC_KEY(sb_snum, SK_JUMP) && !TEST_SYNC_KEY(sb_snum, SK_CROUCH) && if (!TEST_SYNC_KEY(sb_snum, SK_JUMP) && !TEST_SYNC_KEY(sb_snum, SK_CROUCH) &&
myonground && (sector[psect].floorstat&2) && myz >= (fz-(i<<8)-(16<<8))) myonground && (sector[psect].floorstat&2) && my.z >= (fz-(i<<8)-(16<<8)))
myz = fz-(i<<8); my.z = fz-(i<<8);
else else
{ {
myonground = 0; myonground = 0;
myzvel += (g_spriteGravity+80); myvel.z += (g_spriteGravity+80);
if (myzvel >= (4096+2048)) myzvel = (4096+2048); if (myvel.z >= (4096+2048)) myvel.z = (4096+2048);
} }
} }
else else
{ {
if (psectlotag != 1 && psectlotag != 2 && myonground == 0 && myzvel > (6144>>1)) if (psectlotag != 1 && psectlotag != 2 && myonground == 0 && myvel.z > (6144>>1))
myhardlanding = myzvel>>10; myhardlanding = myvel.z>>10;
myonground = 1; myonground = 1;
if (i==40) if (i==40)
{ {
//Smooth on the ground //Smooth on the ground
k = ((fz-(i<<8))-myz)>>1; k = ((fz-(i<<8))-my.z)>>1;
if (klabs(k) < 256) k = 0; if (klabs(k) < 256) k = 0;
myz += k; // ((fz-(i<<8))-myz)>>1; my.z += k; // ((fz-(i<<8))-my.z)>>1;
myzvel -= 768; // 412; myvel.z -= 768; // 412;
if (myzvel < 0) myzvel = 0; if (myvel.z < 0) myvel.z = 0;
} }
else if (myjumpingcounter == 0) else if (myjumpingcounter == 0)
{ {
myz += ((fz-(i<<7))-myz)>>1; //Smooth on the water my.z += ((fz-(i<<7))-my.z)>>1; //Smooth on the water
if (p->on_warping_sector == 0 && myz > fz-(16<<8)) if (p->on_warping_sector == 0 && my.z > fz-(16<<8))
{ {
myz = fz-(16<<8); my.z = fz-(16<<8);
myzvel >>= 1; myvel.z >>= 1;
} }
} }
if (TEST_SYNC_KEY(sb_snum, SK_CROUCH)) if (TEST_SYNC_KEY(sb_snum, SK_CROUCH))
myz += (2048+768); my.z += (2048+768);
if (TEST_SYNC_KEY(sb_snum, SK_JUMP) == 0 && myjumpingtoggle == 1) if (TEST_SYNC_KEY(sb_snum, SK_JUMP) == 0 && myjumpingtoggle == 1)
myjumpingtoggle = 0; myjumpingtoggle = 0;
@ -12369,11 +12370,11 @@ static void Net_DoPrediction(void)
if (psectlotag == 1 && myjumpingcounter > 768) if (psectlotag == 1 && myjumpingcounter > 768)
{ {
myjumpingcounter = 0; myjumpingcounter = 0;
myzvel = -512; myvel.z = -512;
} }
else else
{ {
myzvel -= (sintable[(2048-128+myjumpingcounter)&2047])/12; myvel.z -= (sintable[(2048-128+myjumpingcounter)&2047])/12;
myjumpingcounter += 180; myjumpingcounter += 180;
myonground = 0; myonground = 0;
@ -12382,18 +12383,18 @@ static void Net_DoPrediction(void)
else else
{ {
myjumpingcounter = 0; myjumpingcounter = 0;
myzvel = 0; myvel.z = 0;
} }
} }
myz += myzvel; my.z += myvel.z;
if (myz < (cz+(4<<8))) if (my.z < (cz+(4<<8)))
{ {
myjumpingcounter = 0; myjumpingcounter = 0;
if (myzvel < 0) myxvel = myyvel = 0; if (myvel.z < 0) myvel.x = myvel.y = 0;
myzvel = 128; myvel.z = 128;
myz = cz+(4<<8); my.z = cz+(4<<8);
} }
} }
@ -12407,8 +12408,8 @@ static void Net_DoPrediction(void)
p->kickback_pic < 4)) p->kickback_pic < 4))
{ {
doubvel = 0; doubvel = 0;
myxvel = 0; myvel.x = 0;
myyvel = 0; myvel.y = 0;
} }
else if (syn->avel) //p->ang += syncangvel * constant else if (syn->avel) //p->ang += syncangvel * constant
{ {
@ -12421,42 +12422,42 @@ static void Net_DoPrediction(void)
myang &= 2047; myang &= 2047;
} }
if (myxvel || myyvel || syn->fvel || syn->svel) if (myvel.x || myvel.y || syn->fvel || syn->svel)
{ {
if (p->jetpack_on == 0 && p->steroids_amount > 0 && p->steroids_amount < 400) if (p->jetpack_on == 0 && p->steroids_amount > 0 && p->steroids_amount < 400)
doubvel <<= 1; doubvel <<= 1;
myxvel += ((syn->fvel*doubvel)<<6); myvel.x += ((syn->fvel*doubvel)<<6);
myyvel += ((syn->svel*doubvel)<<6); myvel.y += ((syn->svel*doubvel)<<6);
if ((p->curr_weapon == KNEE_WEAPON && p->kickback_pic > 10 && myonground) || (myonground && TEST_SYNC_KEY(sb_snum, SK_CROUCH))) if ((p->curr_weapon == KNEE_WEAPON && p->kickback_pic > 10 && myonground) || (myonground && TEST_SYNC_KEY(sb_snum, SK_CROUCH)))
{ {
myxvel = mulscale16(myxvel,p->runspeed-0x2000); myvel.x = mulscale16(myvel.x,p->runspeed-0x2000);
myyvel = mulscale16(myyvel,p->runspeed-0x2000); myvel.y = mulscale16(myvel.y,p->runspeed-0x2000);
} }
else else
{ {
if (psectlotag == 2) if (psectlotag == 2)
{ {
myxvel = mulscale16(myxvel,p->runspeed-0x1400); myvel.x = mulscale16(myvel.x,p->runspeed-0x1400);
myyvel = mulscale16(myyvel,p->runspeed-0x1400); myvel.y = mulscale16(myvel.y,p->runspeed-0x1400);
} }
else else
{ {
myxvel = mulscale16(myxvel,p->runspeed); myvel.x = mulscale16(myvel.x,p->runspeed);
myyvel = mulscale16(myyvel,p->runspeed); myvel.y = mulscale16(myvel.y,p->runspeed);
} }
} }
if (klabs(myxvel) < 2048 && klabs(myyvel) < 2048) if (klabs(myvel.x) < 2048 && klabs(myvel.y) < 2048)
myxvel = myyvel = 0; myvel.x = myvel.y = 0;
if (shrunk) if (shrunk)
{ {
myxvel = myvel.x =
mulscale16(myxvel,(p->runspeed)-(p->runspeed>>1)+(p->runspeed>>2)); mulscale16(myvel.x,(p->runspeed)-(p->runspeed>>1)+(p->runspeed>>2));
myyvel = myvel.y =
mulscale16(myyvel,(p->runspeed)-(p->runspeed>>1)+(p->runspeed>>2)); mulscale16(myvel.y,(p->runspeed)-(p->runspeed>>1)+(p->runspeed>>2));
} }
} }
@ -12464,11 +12465,11 @@ FAKEHORIZONLY:
if (psectlotag == 1 || spritebridge == 1) i = (4L<<8); if (psectlotag == 1 || spritebridge == 1) i = (4L<<8);
else i = (20L<<8); else i = (20L<<8);
clipmove(&myx,&myy,&myz,&mycursectnum,myxvel,myyvel,164L,4L<<8,i,CLIPMASK0); clipmove(&my,&mycursectnum,myvel.x,myvel.y,164L,4L<<8,i,CLIPMASK0);
pushmove(&myx,&myy,&myz,&mycursectnum,164L,4L<<8,4L<<8,CLIPMASK0); pushmove(&my,&mycursectnum,164L,4L<<8,4L<<8,CLIPMASK0);
if (p->jetpack_on == 0 && psectlotag != 1 && psectlotag != 2 && shrunk) if (p->jetpack_on == 0 && psectlotag != 1 && psectlotag != 2 && shrunk)
myz += 30<<8; my.z += 30<<8;
if (TEST_SYNC_KEY(sb_snum, SK_CENTER_VIEW) || myhardlanding) if (TEST_SYNC_KEY(sb_snum, SK_CENTER_VIEW) || myhardlanding)
myreturntocenter = 9; myreturntocenter = 9;
@ -12530,9 +12531,9 @@ ENDFAKEPROCESSINPUT:
X_OnEvent(EVENT_FAKEDOMOVETHINGS, g_player[myconnectindex].ps->i, myconnectindex, -1); X_OnEvent(EVENT_FAKEDOMOVETHINGS, g_player[myconnectindex].ps->i, myconnectindex, -1);
myxbak[predictfifoplc&(MOVEFIFOSIZ-1)] = myx; myxbak[predictfifoplc&(MOVEFIFOSIZ-1)] = my.x;
myybak[predictfifoplc&(MOVEFIFOSIZ-1)] = myy; myybak[predictfifoplc&(MOVEFIFOSIZ-1)] = my.y;
myzbak[predictfifoplc&(MOVEFIFOSIZ-1)] = myz; myzbak[predictfifoplc&(MOVEFIFOSIZ-1)] = my.z;
myangbak[predictfifoplc&(MOVEFIFOSIZ-1)] = myang; myangbak[predictfifoplc&(MOVEFIFOSIZ-1)] = myang;
myhorizbak[predictfifoplc&(MOVEFIFOSIZ-1)] = myhoriz; myhorizbak[predictfifoplc&(MOVEFIFOSIZ-1)] = myhoriz;
predictfifoplc++; predictfifoplc++;
@ -12612,29 +12613,30 @@ static int32_t G_DoMoveThings(void)
if (ud.idplayers && ud.multimode > 1) if (ud.idplayers && ud.multimode > 1)
{ {
int32_t sx,sy,sz; hitdata_t hitinfo;
int16_t sect,hw,hs;
for (i=0;i<ud.multimode;i++) for (i=0;i<ud.multimode;i++)
if (g_player[i].ps->holoduke_on != -1) if (g_player[i].ps->holoduke_on != -1)
sprite[g_player[i].ps->holoduke_on].cstat ^= 256; sprite[g_player[i].ps->holoduke_on].cstat ^= 256;
hitscan(g_player[screenpeek].ps->posx,g_player[screenpeek].ps->posy,g_player[screenpeek].ps->posz,g_player[screenpeek].ps->cursectnum, hitscan((vec3_t *)g_player[screenpeek].ps,g_player[screenpeek].ps->cursectnum,
sintable[(g_player[screenpeek].ps->ang+512)&2047], sintable[(g_player[screenpeek].ps->ang+512)&2047],
sintable[g_player[screenpeek].ps->ang&2047], sintable[g_player[screenpeek].ps->ang&2047],
(100-g_player[screenpeek].ps->horiz-g_player[screenpeek].ps->horizoff)<<11,&sect,&hw,&hs,&sx,&sy,&sz,0xffff0030); (100-g_player[screenpeek].ps->horiz-g_player[screenpeek].ps->horizoff)<<11,&hitinfo,0xffff0030);
for (i=0;i<ud.multimode;i++) for (i=0;i<ud.multimode;i++)
if (g_player[i].ps->holoduke_on != -1) if (g_player[i].ps->holoduke_on != -1)
sprite[g_player[i].ps->holoduke_on].cstat ^= 256; sprite[g_player[i].ps->holoduke_on].cstat ^= 256;
if ((hs >= 0) && !(g_player[myconnectindex].ps->gm & MODE_MENU) && sprite[hs].picnum == APLAYER && sprite[hs].yvel != screenpeek && g_player[sprite[hs].yvel].ps->dead_flag == 0) if ((hitinfo.hitsprite >= 0) && !(g_player[myconnectindex].ps->gm & MODE_MENU) &&
sprite[hitinfo.hitsprite].picnum == APLAYER && sprite[hitinfo.hitsprite].yvel != screenpeek &&
g_player[sprite[hitinfo.hitsprite].yvel].ps->dead_flag == 0)
{ {
if (g_player[screenpeek].ps->fta == 0 || g_player[screenpeek].ps->ftq == 117) if (g_player[screenpeek].ps->fta == 0 || g_player[screenpeek].ps->ftq == 117)
{ {
if (ldist(&sprite[g_player[screenpeek].ps->i],&sprite[hs]) < 9216) if (ldist(&sprite[g_player[screenpeek].ps->i],&sprite[hitinfo.hitsprite]) < 9216)
{ {
Bsprintf(ScriptQuotes[117],"%s",&g_player[sprite[hs].yvel].user_name[0]); Bsprintf(ScriptQuotes[117],"%s",&g_player[sprite[hitinfo.hitsprite].yvel].user_name[0]);
g_player[screenpeek].ps->fta = 12, g_player[screenpeek].ps->ftq = 117; g_player[screenpeek].ps->fta = 12, g_player[screenpeek].ps->ftq = 117;
} }
} }

View file

@ -202,19 +202,20 @@ int32_t A_GetFurthestAngle(int32_t iActor,int32_t angs)
{ {
int32_t furthest_angle=0; int32_t furthest_angle=0;
int16_t hitsect,hitwall,hitspr; int32_t d;
int32_t hx, hy, hz, d;
int32_t greatestd = -(1<<30); int32_t greatestd = -(1<<30);
int32_t angincs = 2048/angs,j; int32_t angincs = 2048/angs,j;
hitdata_t hitinfo;
for (j=s->ang;j<(2048+s->ang);j+=angincs) for (j=s->ang;j<(2048+s->ang);j+=angincs)
{ {
hitscan(s->x, s->y, s->z-(8<<8), s->sectnum, s->z -= (8<<8);
hitscan((const vec3_t *)s, s->sectnum,
sintable[(j+512)&2047], sintable[(j+512)&2047],
sintable[j&2047],0, sintable[j&2047],0,
&hitsect,&hitwall,&hitspr,&hx,&hy,&hz,CLIPMASK1); &hitinfo,CLIPMASK1);
s->z += (8<<8);
d = klabs(hx-s->x) + klabs(hy-s->y); d = klabs(hitinfo.pos.x-s->x) + klabs(hitinfo.pos.y-s->y);
if (d > greatestd) if (d > greatestd)
{ {
@ -230,10 +231,10 @@ int32_t A_FurthestVisiblePoint(int32_t iActor,spritetype *ts,int32_t *dax,int32_
{ {
if ((ActorExtra[iActor].temp_data[0]&63)) return -1; if ((ActorExtra[iActor].temp_data[0]&63)) return -1;
{ {
int16_t hitsect,hitwall,hitspr, angincs; int32_t d, da;//, d, cd, ca,tempx,tempy,cx,cy;
int32_t hx, hy, hz, d, da;//, d, cd, ca,tempx,tempy,cx,cy; int32_t j, angincs;
int32_t j;
spritetype *s = &sprite[iActor]; spritetype *s = &sprite[iActor];
hitdata_t hitinfo;
if (ud.multimode < 2 && ud.player_skill < 3) if (ud.multimode < 2 && ud.player_skill < 3)
angincs = 2048/2; angincs = 2048/2;
@ -241,20 +242,24 @@ int32_t A_FurthestVisiblePoint(int32_t iActor,spritetype *ts,int32_t *dax,int32_
for (j=ts->ang;j<(2048+ts->ang);j+=(angincs-(krand()&511))) for (j=ts->ang;j<(2048+ts->ang);j+=(angincs-(krand()&511)))
{ {
hitscan(ts->x, ts->y, ts->z-(16<<8), ts->sectnum, ts->z -= (16<<8);
hitscan((const vec3_t *)ts, ts->sectnum,
sintable[(j+512)&2047], sintable[(j+512)&2047],
sintable[j&2047],16384-(krand()&32767), sintable[j&2047],16384-(krand()&32767),
&hitsect,&hitwall,&hitspr,&hx,&hy,&hz,CLIPMASK1); &hitinfo,CLIPMASK1);
d = klabs(hx-ts->x)+klabs(hy-ts->y); ts->z += (16<<8);
da = klabs(hx-s->x)+klabs(hy-s->y);
if (d < da && hitsect > -1) d = klabs(hitinfo.pos.x-ts->x)+klabs(hitinfo.pos.y-ts->y);
if (cansee(hx,hy,hz,hitsect,s->x,s->y,s->z-(16<<8),s->sectnum)) da = klabs(hitinfo.pos.x-s->x)+klabs(hitinfo.pos.y-s->y);
if (d < da && hitinfo.hitsect > -1)
if (cansee(hitinfo.pos.x,hitinfo.pos.y,hitinfo.pos.z,
hitinfo.hitsect,s->x,s->y,s->z-(16<<8),s->sectnum))
{ {
*dax = hx; *dax = hitinfo.pos.x;
*day = hy; *day = hitinfo.pos.y;
return hitsect; return hitinfo.hitsect;
} }
} }
return -1; return -1;
@ -272,7 +277,9 @@ void A_GetZLimits(int32_t iActor)
if (s->statnum == 4) if (s->statnum == 4)
zr = 4L; zr = 4L;
getzrange(s->x,s->y,s->z-(FOURSLEIGHT),s->sectnum,&ActorExtra[iActor].ceilingz,&hz,&ActorExtra[iActor].floorz,&lz,zr,CLIPMASK0); s->z -= FOURSLEIGHT;
getzrange((vec3_t *)s,s->sectnum,&ActorExtra[iActor].ceilingz,&hz,&ActorExtra[iActor].floorz,&lz,zr,CLIPMASK0);
s->z += FOURSLEIGHT;
if ((lz&49152) == 49152 && (sprite[lz&(MAXSPRITES-1)].cstat&48) == 0) if ((lz&49152) == 49152 && (sprite[lz&(MAXSPRITES-1)].cstat&48) == 0)
{ {
@ -321,7 +328,11 @@ void A_Fall(int32_t iActor)
} }
if ((s->statnum == 1 || s->statnum == 10 || s->statnum == 2 || s->statnum == 6)) if ((s->statnum == 1 || s->statnum == 10 || s->statnum == 2 || s->statnum == 6))
getzrange(s->x,s->y,s->z-(FOURSLEIGHT),s->sectnum,&ActorExtra[iActor].ceilingz,&hz,&ActorExtra[iActor].floorz,&lz,127L,CLIPMASK0); {
s->z -= FOURSLEIGHT;
getzrange((vec3_t *)s,s->sectnum,&ActorExtra[iActor].ceilingz,&hz,&ActorExtra[iActor].floorz,&lz,127L,CLIPMASK0);
s->z += FOURSLEIGHT;
}
else else
{ {
ActorExtra[iActor].ceilingz = sector[s->sectnum].ceilingz; ActorExtra[iActor].ceilingz = sector[s->sectnum].ceilingz;
@ -445,7 +456,7 @@ static void X_Move(void)
{ {
ActorExtra[vm.g_i].bposx = vm.g_sp->x; ActorExtra[vm.g_i].bposx = vm.g_sp->x;
ActorExtra[vm.g_i].bposy = vm.g_sp->y; ActorExtra[vm.g_i].bposy = vm.g_sp->y;
setsprite(vm.g_i,vm.g_sp->x,vm.g_sp->y,vm.g_sp->z); setsprite(vm.g_i,(vec3_t *)vm.g_sp);
} }
return; return;
} }
@ -1078,7 +1089,7 @@ static int32_t X_DoExecute(void)
else if (vm.g_sp->zvel > 2048 && sector[vm.g_sp->sectnum].lotag != 1) else if (vm.g_sp->zvel > 2048 && sector[vm.g_sp->sectnum].lotag != 1)
{ {
j = vm.g_sp->sectnum; j = vm.g_sp->sectnum;
pushmove(&vm.g_sp->x,&vm.g_sp->y,&vm.g_sp->z,(int16_t*)&j,128L,(4L<<8),(4L<<8),CLIPMASK0); pushmove((vec3_t *)vm.g_sp,(int16_t*)&j,128L,(4L<<8),(4L<<8),CLIPMASK0);
if (j != vm.g_sp->sectnum && j >= 0 && j < MAXSECTORS) if (j != vm.g_sp->sectnum && j >= 0 && j < MAXSECTORS)
changespritesect(vm.g_i,j); changespritesect(vm.g_i,j);
A_PlaySound(THUD,vm.g_i); A_PlaySound(THUD,vm.g_i);
@ -2276,48 +2287,62 @@ static int32_t X_DoExecute(void)
case CON_GETZRANGE: case CON_GETZRANGE:
insptr++; insptr++;
{ {
int32_t x=Gv_GetVarX(*insptr++), y=Gv_GetVarX(*insptr++), z=Gv_GetVarX(*insptr++); vec3_t vect;
vect.x = Gv_GetVarX(*insptr++);
vect.y = Gv_GetVarX(*insptr++);
vect.z = Gv_GetVarX(*insptr++);
{
int32_t sectnum=Gv_GetVarX(*insptr++); int32_t sectnum=Gv_GetVarX(*insptr++);
int32_t ceilzvar=*insptr++, ceilhitvar=*insptr++, florzvar=*insptr++, florhitvar=*insptr++; int32_t ceilzvar=*insptr++, ceilhitvar=*insptr++, florzvar=*insptr++, florhitvar=*insptr++;
int32_t walldist=Gv_GetVarX(*insptr++), clipmask=Gv_GetVarX(*insptr++); int32_t walldist=Gv_GetVarX(*insptr++), clipmask=Gv_GetVarX(*insptr++);
int32_t ceilz, ceilhit, florz, florhit; int32_t ceilz, ceilhit, florz, florhit;
if ((sectnum<0 || sectnum>=numsectors) && g_scriptSanityChecks) if ((sectnum<0 || sectnum>=numsectors) && g_scriptSanityChecks)
{ {
OSD_Printf(CON_ERROR "Invalid sector %d\n",g_errorLineNum,keyw[g_tw],sectnum); OSD_Printf(CON_ERROR "Invalid sector %d\n",g_errorLineNum,keyw[g_tw],sectnum);
break; break;
} }
getzrange(x, y, z, sectnum, &ceilz, &ceilhit, &florz, &florhit, walldist, clipmask); getzrange(&vect, sectnum, &ceilz, &ceilhit, &florz, &florhit, walldist, clipmask);
Gv_SetVarX(ceilzvar, ceilz); Gv_SetVarX(ceilzvar, ceilz);
Gv_SetVarX(ceilhitvar, ceilhit); Gv_SetVarX(ceilhitvar, ceilhit);
Gv_SetVarX(florzvar, florz); Gv_SetVarX(florzvar, florz);
Gv_SetVarX(florhitvar, florhit); Gv_SetVarX(florhitvar, florhit);
}
break; break;
} }
case CON_HITSCAN: case CON_HITSCAN:
insptr++; insptr++;
{ {
int32_t xs=Gv_GetVarX(*insptr++), ys=Gv_GetVarX(*insptr++), zs=Gv_GetVarX(*insptr++); vec3_t vect;
hitdata_t hitinfo;
vect.x = Gv_GetVarX(*insptr++);
vect.x = Gv_GetVarX(*insptr++);
vect.z = Gv_GetVarX(*insptr++);
{
int32_t sectnum=Gv_GetVarX(*insptr++); int32_t sectnum=Gv_GetVarX(*insptr++);
int32_t vx=Gv_GetVarX(*insptr++), vy=Gv_GetVarX(*insptr++), vz=Gv_GetVarX(*insptr++); int32_t vx=Gv_GetVarX(*insptr++), vy=Gv_GetVarX(*insptr++), vz=Gv_GetVarX(*insptr++);
int32_t hitsectvar=*insptr++, hitwallvar=*insptr++, hitspritevar=*insptr++; int32_t hitsectvar=*insptr++, hitwallvar=*insptr++, hitspritevar=*insptr++;
int32_t hitxvar=*insptr++, hityvar=*insptr++, hitzvar=*insptr++, cliptype=Gv_GetVarX(*insptr++); int32_t hitxvar=*insptr++, hityvar=*insptr++, hitzvar=*insptr++, cliptype=Gv_GetVarX(*insptr++);
int16_t hitsect, hitwall, hitsprite;
int32_t hitx, hity, hitz;
if ((sectnum<0 || sectnum>=numsectors) && g_scriptSanityChecks) if ((sectnum<0 || sectnum>=numsectors) && g_scriptSanityChecks)
{ {
OSD_Printf(CON_ERROR "Invalid sector %d\n",g_errorLineNum,keyw[g_tw],sectnum); OSD_Printf(CON_ERROR "Invalid sector %d\n",g_errorLineNum,keyw[g_tw],sectnum);
break; break;
} }
hitscan(xs, ys, zs, sectnum, vx, vy, vz, &hitsect, &hitwall, &hitsprite, &hitx, &hity, &hitz, cliptype); hitscan((const vec3_t *)&vect, sectnum, vx, vy, vz, &hitinfo, cliptype);
Gv_SetVarX(hitsectvar, hitsect); Gv_SetVarX(hitsectvar, hitinfo.hitsect);
Gv_SetVarX(hitwallvar, hitwall); Gv_SetVarX(hitwallvar, hitinfo.hitwall);
Gv_SetVarX(hitspritevar, hitsprite); Gv_SetVarX(hitspritevar, hitinfo.hitsprite);
Gv_SetVarX(hitxvar, hitx); Gv_SetVarX(hitxvar, hitinfo.pos.x);
Gv_SetVarX(hityvar, hity); Gv_SetVarX(hityvar, hitinfo.pos.y);
Gv_SetVarX(hitzvar, hitz); Gv_SetVarX(hitzvar, hitinfo.pos.z);
}
break; break;
} }
@ -2423,7 +2448,7 @@ static int32_t X_DoExecute(void)
OSD_Printf(CON_ERROR "invalid sprite ID %d\n",g_errorLineNum,keyw[g_tw],spritenum); OSD_Printf(CON_ERROR "invalid sprite ID %d\n",g_errorLineNum,keyw[g_tw],spritenum);
break; break;
} }
setsprite(spritenum, davector.x, davector.y, davector.z); setsprite(spritenum, &davector);
break; break;
} }
@ -2620,12 +2645,17 @@ static int32_t X_DoExecute(void)
} }
else else
{ {
vec3_t tmpvect;
tmpvect.x = g_player[vm.g_p].ps->posx;
tmpvect.y = g_player[vm.g_p].ps->posy;
tmpvect.z = g_player[vm.g_p].ps->posz+PHEIGHT;
P_RandomSpawnPoint(vm.g_p); P_RandomSpawnPoint(vm.g_p);
vm.g_sp->x = ActorExtra[vm.g_i].bposx = g_player[vm.g_p].ps->bobposx = g_player[vm.g_p].ps->oposx = g_player[vm.g_p].ps->posx; vm.g_sp->x = ActorExtra[vm.g_i].bposx = g_player[vm.g_p].ps->bobposx = g_player[vm.g_p].ps->oposx = g_player[vm.g_p].ps->posx;
vm.g_sp->y = ActorExtra[vm.g_i].bposy = g_player[vm.g_p].ps->bobposy = g_player[vm.g_p].ps->oposy =g_player[vm.g_p].ps->posy; vm.g_sp->y = ActorExtra[vm.g_i].bposy = g_player[vm.g_p].ps->bobposy = g_player[vm.g_p].ps->oposy =g_player[vm.g_p].ps->posy;
vm.g_sp->z = ActorExtra[vm.g_i].bposy = g_player[vm.g_p].ps->oposz =g_player[vm.g_p].ps->posz; vm.g_sp->z = ActorExtra[vm.g_i].bposy = g_player[vm.g_p].ps->oposz =g_player[vm.g_p].ps->posz;
updatesector(g_player[vm.g_p].ps->posx,g_player[vm.g_p].ps->posy,&g_player[vm.g_p].ps->cursectnum); updatesector(g_player[vm.g_p].ps->posx,g_player[vm.g_p].ps->posy,&g_player[vm.g_p].ps->cursectnum);
setsprite(g_player[vm.g_p].ps->i,g_player[vm.g_p].ps->posx,g_player[vm.g_p].ps->posy,g_player[vm.g_p].ps->posz+PHEIGHT); setsprite(g_player[vm.g_p].ps->i,&tmpvect);
vm.g_sp->cstat = 257; vm.g_sp->cstat = 257;
vm.g_sp->shade = -12; vm.g_sp->shade = -12;

View file

@ -1501,15 +1501,15 @@ static void Gv_AddSystemVars(void)
Gv_NewVar("cameradist",(intptr_t)&g_cameraDistance, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK); Gv_NewVar("cameradist",(intptr_t)&g_cameraDistance, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK);
Gv_NewVar("cameraclock",(intptr_t)&g_cameraClock, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK); Gv_NewVar("cameraclock",(intptr_t)&g_cameraClock, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK);
Gv_NewVar("myx",(intptr_t)&myx, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK); Gv_NewVar("myx",(intptr_t)&my.x, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK);
Gv_NewVar("myy",(intptr_t)&myy, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK); Gv_NewVar("myy",(intptr_t)&my.y, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK);
Gv_NewVar("myz",(intptr_t)&myz, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK); Gv_NewVar("myz",(intptr_t)&my.z, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK);
Gv_NewVar("omyx",(intptr_t)&omyx, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK); Gv_NewVar("omyx",(intptr_t)&omy.x, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK);
Gv_NewVar("omyy",(intptr_t)&omyy, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK); Gv_NewVar("omyy",(intptr_t)&omy.y, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK);
Gv_NewVar("omyz",(intptr_t)&omyz, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK); Gv_NewVar("omyz",(intptr_t)&omy.z, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK);
Gv_NewVar("myxvel",(intptr_t)&myxvel, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK); Gv_NewVar("myvelx",(intptr_t)&myvel.x, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK);
Gv_NewVar("myyvel",(intptr_t)&myyvel, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK); Gv_NewVar("myvely",(intptr_t)&myvel.y, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK);
Gv_NewVar("myzvel",(intptr_t)&myzvel, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK); Gv_NewVar("myvelz",(intptr_t)&myvel.z, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK);
Gv_NewVar("myhoriz",(intptr_t)&myhoriz, GAMEVAR_SYSTEM | GAMEVAR_SHORTPTR | GAMEVAR_SYNCCHECK); Gv_NewVar("myhoriz",(intptr_t)&myhoriz, GAMEVAR_SYSTEM | GAMEVAR_SHORTPTR | GAMEVAR_SYNCCHECK);
Gv_NewVar("myhorizoff",(intptr_t)&myhorizoff, GAMEVAR_SYSTEM | GAMEVAR_SHORTPTR | GAMEVAR_SYNCCHECK); Gv_NewVar("myhorizoff",(intptr_t)&myhorizoff, GAMEVAR_SYSTEM | GAMEVAR_SHORTPTR | GAMEVAR_SYNCCHECK);
@ -1651,15 +1651,15 @@ void Gv_RefreshPointers(void)
aGameVars[Gv_GetVarIndex("cameradist")].val.lValue = (intptr_t)&g_cameraDistance; aGameVars[Gv_GetVarIndex("cameradist")].val.lValue = (intptr_t)&g_cameraDistance;
aGameVars[Gv_GetVarIndex("cameraclock")].val.lValue = (intptr_t)&g_cameraClock; aGameVars[Gv_GetVarIndex("cameraclock")].val.lValue = (intptr_t)&g_cameraClock;
aGameVars[Gv_GetVarIndex("myx")].val.lValue = (intptr_t)&myx; aGameVars[Gv_GetVarIndex("myx")].val.lValue = (intptr_t)&my.x;
aGameVars[Gv_GetVarIndex("myy")].val.lValue = (intptr_t)&myy; aGameVars[Gv_GetVarIndex("myy")].val.lValue = (intptr_t)&my.y;
aGameVars[Gv_GetVarIndex("myz")].val.lValue = (intptr_t)&myz; aGameVars[Gv_GetVarIndex("myz")].val.lValue = (intptr_t)&my.z;
aGameVars[Gv_GetVarIndex("omyx")].val.lValue = (intptr_t)&omyx; aGameVars[Gv_GetVarIndex("omyx")].val.lValue = (intptr_t)&omy.x;
aGameVars[Gv_GetVarIndex("omyy")].val.lValue = (intptr_t)&omyy; aGameVars[Gv_GetVarIndex("omyy")].val.lValue = (intptr_t)&omy.y;
aGameVars[Gv_GetVarIndex("omyz")].val.lValue = (intptr_t)&omyz; aGameVars[Gv_GetVarIndex("omyz")].val.lValue = (intptr_t)&omy.z;
aGameVars[Gv_GetVarIndex("myxvel")].val.lValue = (intptr_t)&myxvel; aGameVars[Gv_GetVarIndex("myvelx")].val.lValue = (intptr_t)&myvel.x;
aGameVars[Gv_GetVarIndex("myyvel")].val.lValue = (intptr_t)&myyvel; aGameVars[Gv_GetVarIndex("myvely")].val.lValue = (intptr_t)&myvel.y;
aGameVars[Gv_GetVarIndex("myzvel")].val.lValue = (intptr_t)&myzvel; aGameVars[Gv_GetVarIndex("myvelz")].val.lValue = (intptr_t)&myvel.z;
aGameVars[Gv_GetVarIndex("myhoriz")].val.lValue = (intptr_t)&myhoriz; aGameVars[Gv_GetVarIndex("myhoriz")].val.lValue = (intptr_t)&myhoriz;
aGameVars[Gv_GetVarIndex("myhorizoff")].val.lValue = (intptr_t)&myhorizoff; aGameVars[Gv_GetVarIndex("myhorizoff")].val.lValue = (intptr_t)&myhorizoff;

View file

@ -23,7 +23,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
#include "duke3d.h" #include "duke3d.h"
const char *s_buildDate = "20090105"; const char *s_buildDate = "20090112";
char *MusicPtr = NULL; char *MusicPtr = NULL;
int32_t g_musicSize; int32_t g_musicSize;
@ -147,7 +147,7 @@ int32_t g_impactDamage;
int32_t g_scriptDebug; int32_t g_scriptDebug;
//GLOBAL.C - replace the end "my's" with this //GLOBAL.C - replace the end "my's" with this
int32_t myx, omyx, myxvel, myy, omyy, myyvel, myz, omyz, myzvel; vec3_t my, omy, myvel;
int16_t myhoriz, omyhoriz, myhorizoff, omyhorizoff; int16_t myhoriz, omyhoriz, myhorizoff, omyhorizoff;
int16_t myang, omyang, mycursectnum, myjumpingcounter; int16_t myang, omyang, mycursectnum, myjumpingcounter;

View file

@ -30,7 +30,8 @@ char *defsfilename = "duke3d.def";
extern char keystatus[]; extern char keystatus[];
extern int16_t defaultspritecstat; extern int16_t defaultspritecstat;
extern int32_t posx, posy, posz, horiz, qsetmode; extern int32_t horiz, qsetmode;
extern vec3_t pos;
extern int16_t ang, cursectnum; extern int16_t ang, cursectnum;
extern int16_t ceilingheinum, floorheinum; extern int16_t ceilingheinum, floorheinum;
extern char names[MAXTILES][25]; extern char names[MAXTILES][25];

View file

@ -515,11 +515,11 @@ static int32_t osdcmd_setweaponscale(const osdfuncparm_t *parm)
static int32_t osdcmd_spawn(const osdfuncparm_t *parm) static int32_t osdcmd_spawn(const osdfuncparm_t *parm)
{ {
int32_t x=0,y=0,z=0;
uint16_t cstat=0,picnum=0; uint16_t cstat=0,picnum=0;
char pal=0; char pal=0;
int16_t ang=0; int16_t ang=0;
int16_t set=0, idx; int16_t set=0, idx;
vec3_t vect;
if (numplayers > 1 || !(g_player[myconnectindex].ps->gm & MODE_GAME)) if (numplayers > 1 || !(g_player[myconnectindex].ps->gm & MODE_GAME))
{ {
@ -530,9 +530,9 @@ static int32_t osdcmd_spawn(const osdfuncparm_t *parm)
switch (parm->numparms) switch (parm->numparms)
{ {
case 7: // x,y,z case 7: // x,y,z
x = Batol(parm->parms[4]); vect.x = Batol(parm->parms[4]);
y = Batol(parm->parms[5]); vect.y = Batol(parm->parms[5]);
z = Batol(parm->parms[6]); vect.z = Batol(parm->parms[6]);
set |= 8; set |= 8;
case 4: // ang case 4: // ang
ang = Batol(parm->parms[3]) & 2047; ang = Batol(parm->parms[3]) & 2047;
@ -589,7 +589,7 @@ static int32_t osdcmd_spawn(const osdfuncparm_t *parm)
if (set & 4) sprite[idx].ang = ang; if (set & 4) sprite[idx].ang = ang;
if (set & 8) if (set & 8)
{ {
if (setsprite(idx, x,y,z) < 0) if (setsprite(idx, &vect) < 0)
{ {
OSD_Printf("spawn: Sprite can't be spawned into null space\n"); OSD_Printf("spawn: Sprite can't be spawned into null space\n");
deletesprite(idx); deletesprite(idx);

File diff suppressed because it is too large Load diff

View file

@ -1629,10 +1629,10 @@ void clearfifo(void)
void Net_ResetPrediction(void) void Net_ResetPrediction(void)
{ {
myx = omyx = g_player[myconnectindex].ps->posx; my.x = omy.x = g_player[myconnectindex].ps->posx;
myy = omyy = g_player[myconnectindex].ps->posy; my.y = omy.y = g_player[myconnectindex].ps->posy;
myz = omyz = g_player[myconnectindex].ps->posz; my.z = omy.z = g_player[myconnectindex].ps->posz;
myxvel = myyvel = myzvel = 0; myvel.x = myvel.y = myvel.z = 0;
myang = omyang = g_player[myconnectindex].ps->ang; myang = omyang = g_player[myconnectindex].ps->ang;
myhoriz = omyhoriz = g_player[myconnectindex].ps->horiz; myhoriz = omyhoriz = g_player[myconnectindex].ps->horiz;
myhorizoff = omyhorizoff = g_player[myconnectindex].ps->horizoff; myhorizoff = omyhorizoff = g_player[myconnectindex].ps->horizoff;

View file

@ -188,7 +188,7 @@ int32_t isanearoperator(int32_t lotag)
return 0; return 0;
} }
inline int32_t CheckPlayerInSector(int32_t sect) inline int32_t G_CheckPlayerInSector(int32_t sect)
{ {
int32_t i = connecthead; int32_t i = connecthead;
for (;i>=0;i=connectpoint2[i]) for (;i>=0;i=connectpoint2[i])
@ -329,8 +329,8 @@ void G_DoSectorAnimations(void)
g_player[p].ps->poszv = 0; g_player[p].ps->poszv = 0;
if (p == myconnectindex) if (p == myconnectindex)
{ {
myz += v; my.z += v;
myzvel = 0; myvel.z = 0;
myzbak[((movefifoplc-1)&(MOVEFIFOSIZ-1))] = g_player[p].ps->posz; myzbak[((movefifoplc-1)&(MOVEFIFOSIZ-1))] = g_player[p].ps->posz;
} }
} }
@ -2456,7 +2456,7 @@ void A_DamageObject(int32_t i,int32_t sn)
SA = (sprite[sn].ang+1024)&2047; SA = (sprite[sn].ang+1024)&2047;
sprite[i].xvel = -(sprite[sn].extra<<2); sprite[i].xvel = -(sprite[sn].extra<<2);
j = SECT; j = SECT;
pushmove(&SX,&SY,&SZ,&j,128L,(4L<<8),(4L<<8),CLIPMASK0); pushmove((vec3_t *)&sprite[i],&j,128L,(4L<<8),(4L<<8),CLIPMASK0);
if (j != SECT && j >= 0 && j < MAXSECTORS) if (j != SECT && j >= 0 && j < MAXSECTORS)
changespritesect(i,j); changespritesect(i,j);
} }
@ -3203,36 +3203,39 @@ CHECKINV1:
int32_t A_CheckHitSprite(int32_t i, int16_t *hitsp) int32_t A_CheckHitSprite(int32_t i, int16_t *hitsp)
{ {
int32_t sx,sy,sz,zoff; hitdata_t hitinfo;
int16_t sect,hw; int32_t zoff = 0;
if (A_CheckEnemySprite(&sprite[i])) if (A_CheckEnemySprite(&sprite[i]))
zoff = (42<<8); zoff = (42<<8);
else if (PN == APLAYER) zoff = (39<<8); else if (PN == APLAYER) zoff = (39<<8);
else zoff = 0;
hitscan(SX,SY,SZ-zoff,SECT, SZ -= zoff;
hitscan((const vec3_t *)&sprite[i],SECT,
sintable[(SA+512)&2047], sintable[(SA+512)&2047],
sintable[SA&2047], sintable[SA&2047],
0,&sect,&hw,hitsp,&sx,&sy,&sz,CLIPMASK1); 0,&hitinfo,CLIPMASK1);
if (hw >= 0 && (wall[hw].cstat&16) && A_CheckEnemySprite(&sprite[i])) SZ += zoff;
*hitsp = hitinfo.hitsprite;
if (hitinfo.hitwall >= 0 && (wall[hitinfo.hitwall].cstat&16) && A_CheckEnemySprite(&sprite[i]))
return((1<<30)); return((1<<30));
return (FindDistance2D(sx-SX,sy-SY)); return (FindDistance2D(hitinfo.pos.x-SX,hitinfo.pos.y-SY));
} }
static int32_t hitawall(DukePlayer_t *p,int16_t *hitw) static int32_t hitawall(DukePlayer_t *p,int16_t *hitw)
{ {
int32_t sx,sy,sz; hitdata_t hitinfo;
int16_t sect,hs;
hitscan(p->posx,p->posy,p->posz,p->cursectnum, hitscan((const vec3_t *)p,p->cursectnum,
sintable[(p->ang+512)&2047], sintable[(p->ang+512)&2047],
sintable[p->ang&2047], sintable[p->ang&2047],
0,&sect,hitw,&hs,&sx,&sy,&sz,CLIPMASK0); 0,&hitinfo,CLIPMASK0);
return (FindDistance2D(sx-p->posx,sy-p->posy)); *hitw = hitinfo.hitwall;
return (FindDistance2D(hitinfo.pos.x-p->posx,hitinfo.pos.y-p->posy));
} }

View file

@ -513,10 +513,11 @@ int32_t A_PlaySound(uint32_t num, int32_t i)
return 0; return 0;
} }
{ {
/*
vec3_t davector; vec3_t davector;
Bmemcpy(&davector,&sprite[i],sizeof(intptr_t) * 3); Bmemcpy(&davector,&sprite[i],sizeof(intptr_t) * 3); */
// OSD_Printf("x: %d y: %d z: %d\n",davector.x,davector.y,davector.z); // OSD_Printf("x: %d y: %d z: %d\n",davector.x,davector.y,davector.z);
return S_PlaySoundXYZ(num,i, &davector); return S_PlaySoundXYZ(num,i, (vec3_t *)&sprite[i]);
} }
} }