Three-way clipping in Mapster32 (still toggled with 'N): on and off as

before, and additionally a mode that doesn't clip against masked walls
and sprites.

git-svn-id: https://svn.eduke32.com/eduke32@2028 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
helixhorned 2011-09-16 19:17:48 +00:00
parent 9b70a2efbf
commit 9b1d384723
4 changed files with 25 additions and 16 deletions

View file

@ -392,7 +392,6 @@ EXTERN int32_t h_xsize[MAXTILES], h_ysize[MAXTILES];
EXTERN int8_t h_xoffs[MAXTILES], h_yoffs[MAXTILES]; EXTERN int8_t h_xoffs[MAXTILES], h_yoffs[MAXTILES];
extern const char *engineerrstr; extern const char *engineerrstr;
extern char noclip;
EXTERN int32_t editorzrange[2]; EXTERN int32_t editorzrange[2];

View file

@ -40,6 +40,8 @@ extern int32_t horiz;
extern vec3_t pos; extern vec3_t pos;
extern int16_t ang, cursectnum; extern int16_t ang, cursectnum;
extern int8_t m32_clipping; // 0: none, 1: only white walls, 2: like game
extern int16_t editstatus, searchit; extern int16_t editstatus, searchit;
extern int32_t searchx, searchy, osearchx, osearchy; //search input extern int32_t searchx, searchy, osearchx, osearchy; //search input

View file

@ -27,7 +27,7 @@ static char kensig[64];
extern const char *ExtGetVer(void); extern const char *ExtGetVer(void);
char noclip=0; int8_t m32_clipping=2;
// 0 1 2 3 4 5 6 7 // 0 1 2 3 4 5 6 7
// up, down, left, right, lshift, rctrl, lctrl, space // up, down, left, right, lshift, rctrl, lctrl, space
@ -836,15 +836,17 @@ void spriteoncfz(int32_t i, int32_t *czptr, int32_t *fzptr)
static void move_and_update(int32_t xvect, int32_t yvect, int32_t addshr) static void move_and_update(int32_t xvect, int32_t yvect, int32_t addshr)
{ {
if (noclip) if (m32_clipping==0)
{ {
pos.x += xvect>>(14+addshr); pos.x += xvect>>(14+addshr);
pos.y += yvect>>(14+addshr); pos.y += yvect>>(14+addshr);
updatesector(pos.x,pos.y, &cursectnum); updatesector(pos.x,pos.y, &cursectnum);
} }
else else
{
clipmove(&pos,&cursectnum, xvect>>addshr,yvect>>addshr, clipmove(&pos,&cursectnum, xvect>>addshr,yvect>>addshr,
128,4<<8,4<<8, CLIPMASK0); 128,4<<8,4<<8, (m32_clipping==1) ? 0 : CLIPMASK0);
}
} }
static void mainloop_move(void) static void mainloop_move(void)
@ -1040,7 +1042,7 @@ void editinput(void)
mainloop_move(); mainloop_move();
getzrange(&pos,cursectnum, &hiz,&hihit, &loz,&lohit, 128,CLIPMASK0); getzrange(&pos,cursectnum, &hiz,&hihit, &loz,&lohit, 128, (m32_clipping==1)?0:CLIPMASK0);
/* /*
{ {
int32_t his = !(hihit&32768), los = !(lohit&32768); int32_t his = !(hihit&32768), los = !(lohit&32768);
@ -1118,11 +1120,11 @@ void editinput(void)
} }
} }
if (!noclip) if (m32_clipping)
inpclamp(&goalz, hiz+(4<<8), loz-(4<<8)); inpclamp(&goalz, hiz+(4<<8), loz-(4<<8));
if (zmode == 1) goalz = loz-zlock; if (zmode == 1) goalz = loz-zlock;
if (!noclip && (goalz < hiz+(4<<8))) if (m32_clipping && (goalz < hiz+(4<<8)))
goalz = ((loz+hiz)>>1); //ceiling&floor too close goalz = ((loz+hiz)>>1); //ceiling&floor too close
if (zmode == 1) pos.z = goalz; if (zmode == 1) pos.z = goalz;
@ -1137,7 +1139,7 @@ void editinput(void)
pos.z += hvel; pos.z += hvel;
if (!noclip) if (m32_clipping)
{ {
if (pos.z > loz-(4<<8)) pos.z = loz-(4<<8), hvel = 0; if (pos.z > loz-(4<<8)) pos.z = loz-(4<<8), hvel = 0;
if (pos.z < hiz+(4<<8)) pos.z = hiz+(4<<8), hvel = 0; if (pos.z < hiz+(4<<8)) pos.z = hiz+(4<<8), hvel = 0;

View file

@ -5330,8 +5330,8 @@ static void Keys3d(void)
if (YAXCHK(!AIMING_AT_CEILING_OR_FLOOR || yax_getbunch(searchsector, AIMING_AT_FLOOR) < 0)) if (YAXCHK(!AIMING_AT_CEILING_OR_FLOOR || yax_getbunch(searchsector, AIMING_AT_FLOOR) < 0))
#endif #endif
{ {
i = noclip; i = m32_clipping;
noclip = 1; m32_clipping = 0;
switch (searchstat) switch (searchstat)
{ {
@ -5371,7 +5371,7 @@ static void Keys3d(void)
setslope(searchsector, YAX_FLOOR, sector[searchsector].floorheinum); setslope(searchsector, YAX_FLOOR, sector[searchsector].floorheinum);
asksave = 1; asksave = 1;
noclip = i; m32_clipping = i;
} }
@ -8835,8 +8835,11 @@ static int32_t osdcmd_sensitivity(const osdfuncparm_t *parm)
static int32_t osdcmd_noclip(const osdfuncparm_t *parm) static int32_t osdcmd_noclip(const osdfuncparm_t *parm)
{ {
UNREFERENCED_PARAMETER(parm); UNREFERENCED_PARAMETER(parm);
noclip = !noclip; m32_clipping--;
OSD_Printf("Clipping %s\n", noclip?"disabled":"enabled"); if (m32_clipping < 0)
m32_clipping = 2;
OSD_Printf("Clipping %s\n", m32_clipping==0 ? "disabled" :
(m32_clipping==1 ? "non-masks only" : "enabled"));
return OSDCMD_OK; return OSDCMD_OK;
} }
@ -9321,7 +9324,7 @@ static int32_t registerosdcommands(void)
OSD_RegisterFunction("initgroupfile","initgroupfile <path>: adds a grp file into the game filesystem", osdcmd_initgroupfile); OSD_RegisterFunction("initgroupfile","initgroupfile <path>: adds a grp file into the game filesystem", osdcmd_initgroupfile);
OSD_RegisterFunction("noclip","noclip: toggles clipping mode", osdcmd_noclip); OSD_RegisterFunction("m32_clipping","m32_clipping: toggles clipping mode", osdcmd_noclip);
OSD_RegisterFunction("quit","quit: exits the editor immediately", osdcmd_quit); OSD_RegisterFunction("quit","quit: exits the editor immediately", osdcmd_quit);
OSD_RegisterFunction("exit","exit: exits the editor immediately", osdcmd_quit); OSD_RegisterFunction("exit","exit: exits the editor immediately", osdcmd_quit);
@ -11013,8 +11016,11 @@ static void Keys2d3d(void)
if (keystatus[KEYSC_QUOTE] && PRESSED_KEYSC(N)) // 'N if (keystatus[KEYSC_QUOTE] && PRESSED_KEYSC(N)) // 'N
{ {
noclip = !noclip; m32_clipping--;
message("Clipping %s", noclip?"disabled":"enabled"); if (m32_clipping < 0)
m32_clipping = 2;
message("Clipping %s", m32_clipping==0 ? "disabled" :
(m32_clipping==1 ? "non-masks only" : "enabled"));
} }
if (eitherCTRL && PRESSED_KEYSC(N)) // CTRL+N if (eitherCTRL && PRESSED_KEYSC(N)) // CTRL+N