mirror of
https://github.com/DrBeef/Raze.git
synced 2024-11-15 17:01:51 +00:00
Mapster32: add var 'corruptcheck_game_duke3d' and enable by default.
Currently, this checks for effector sprites that are not face-aligned. See https://forums.duke4.net/topic/8324-icestation-colossus-map-broken git-svn-id: https://svn.eduke32.com/eduke32@5420 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
72039e80ee
commit
51489e44d4
4 changed files with 42 additions and 1 deletions
|
@ -253,6 +253,7 @@ static inline int32_t get_nextloopstart(int32_t loopstart)
|
|||
extern int32_t corruptlevel, numcorruptthings, corruptthings[MAXCORRUPTTHINGS];
|
||||
extern int32_t autocorruptcheck;
|
||||
extern int32_t corruptcheck_noalreadyrefd, corruptcheck_heinum;
|
||||
extern int32_t corruptcheck_game_duke3d;
|
||||
extern int32_t corrupt_tryfix_alt;
|
||||
extern int32_t CheckMapCorruption(int32_t printfromlev, uint64_t tryfixing);
|
||||
|
||||
|
|
|
@ -209,6 +209,8 @@ int32_t loadsetup(const char *fn)
|
|||
if (readconfig(fp, "autocorruptchecksec", val, VL) > 0) autocorruptcheck = max(0, atoi_safe(val));
|
||||
if (readconfig(fp, "corruptcheck_noalreadyrefd", val, VL) > 0)
|
||||
corruptcheck_noalreadyrefd = !!atoi_safe(val);
|
||||
if (readconfig(fp, "corruptcheck_game_duke3d", val, VL) > 0)
|
||||
corruptcheck_game_duke3d = !!atoi_safe(val);
|
||||
if (readconfig(fp, "corruptcheck_heinum", val, VL) > 0)
|
||||
corruptcheck_heinum = clamp(atoi_safe(val), 0, 2);
|
||||
if (readconfig(fp, "fixmaponsave_sprites", val, VL) > 0)
|
||||
|
@ -490,6 +492,9 @@ int32_t writesetup(const char *fn)
|
|||
"; Ignore 'already referenced wall' warnings\n"
|
||||
"corruptcheck_noalreadyrefd = %d\n"
|
||||
"\n"
|
||||
"; Flag Duke3D issues\n"
|
||||
"corruptcheck_game_duke3d = %d\n"
|
||||
"\n"
|
||||
"; Auto-correct inconsistent ceilingstat/floorstat bit 2 and .heinum?\n"
|
||||
"; Set to 2, also warn on 'corruptcheck'.\n"
|
||||
"corruptcheck_heinum = %d\n"
|
||||
|
@ -626,7 +631,8 @@ int32_t writesetup(const char *fn)
|
|||
msens, unrealedlook, pk_uedaccel, quickmapcycling,
|
||||
sideview_reversehrot,
|
||||
revertCTRL,scrollamount,pk_turnaccel,pk_turndecel,autosave,autocorruptcheck,
|
||||
corruptcheck_noalreadyrefd, corruptcheck_heinum, fixmaponsave_sprites, keeptexturestretch,
|
||||
corruptcheck_noalreadyrefd, corruptcheck_game_duke3d,
|
||||
corruptcheck_heinum, fixmaponsave_sprites, keeptexturestretch,
|
||||
showheightindicators,showambiencesounds,pathsearchmode,
|
||||
m32_2d3dmode,m32_2d3dsize,m32_2d3d.x, m32_2d3d.y,
|
||||
autogray, //showinnergray,
|
||||
|
|
|
@ -8634,6 +8634,14 @@ static int32_t osdcmd_vars_pk(const osdfuncparm_t *parm)
|
|||
return OSDCMD_OK;
|
||||
}
|
||||
|
||||
if (!Bstrcasecmp(parm->name, "corruptcheck_game_duke3d"))
|
||||
{
|
||||
corruptcheck_game_duke3d = !corruptcheck_game_duke3d;
|
||||
OSD_Printf("%s Duke3D issues\n",
|
||||
!corruptcheck_game_duke3d?"Ignore":"Regard");
|
||||
return OSDCMD_OK;
|
||||
}
|
||||
|
||||
if (!Bstrcasecmp(parm->name, "corruptcheck_heinum"))
|
||||
{
|
||||
if (parm->numparms > 1)
|
||||
|
@ -9083,6 +9091,7 @@ static int32_t registerosdcommands(void)
|
|||
OSD_RegisterFunction("show_heightindicators", "show_heightindicators {0, 1 or 2}: sets display of height indicators in 2D mode", osdcmd_vars_pk);
|
||||
OSD_RegisterFunction("show_ambiencesounds", "show_ambiencesounds {0, 1 or 2}: sets display of MUSICANDSFX circles in 2D mode", osdcmd_vars_pk);
|
||||
OSD_RegisterFunction("corruptcheck_noalreadyrefd", "corruptcheck_noalreadyrefd: toggles ignoring of one-to-many red wall connections", osdcmd_vars_pk);
|
||||
OSD_RegisterFunction("corruptcheck_game_duke3d", "corruptcheck_game_duke3d: toggles ignoring of Duke3D issues", osdcmd_vars_pk);
|
||||
OSD_RegisterFunction("corruptcheck_heinum", "corruptcheck_heinum: toggles auto-correcting inconsistent c/fstat bit 2 and heinum (2: also warn)", osdcmd_vars_pk);
|
||||
OSD_RegisterFunction("keeptexturestretch", "keeptexturestretch: toggles keeping texture stretching when dragging wall vertices", osdcmd_vars_pk);
|
||||
|
||||
|
|
|
@ -45,6 +45,7 @@ int32_t autosave=180;
|
|||
|
||||
int32_t autocorruptcheck;
|
||||
int32_t corruptcheck_noalreadyrefd, corruptcheck_heinum=1;
|
||||
int32_t corruptcheck_game_duke3d=1; // TODO: at startup, make conditional on which game we are editing for?
|
||||
int32_t corrupt_tryfix_alt;
|
||||
int32_t corruptlevel, numcorruptthings, corruptthings[MAXCORRUPTTHINGS];
|
||||
|
||||
|
@ -1302,6 +1303,30 @@ end_wall_loop_checks:
|
|||
CORRUPTCHK_PRINT(0, CORRUPT_SPRITE|i, "SPRITE[%d].PICNUM=%d out of range, resetting to 0", i, TrackerCast(sprite[i].picnum));
|
||||
}
|
||||
|
||||
if (corruptcheck_game_duke3d)
|
||||
{
|
||||
const int32_t tilenum = sprite[i].picnum;
|
||||
|
||||
if (tilenum >= 1 && tilenum <= 9 && (sprite[i].cstat&48))
|
||||
{
|
||||
const int32_t onumct = numcorruptthings;
|
||||
|
||||
CORRUPTCHK_PRINT(1, CORRUPT_SPRITE|i, "%s sprite %d is not face-aligned",
|
||||
names[tilenum], i);
|
||||
|
||||
if (onumct < MAXCORRUPTTHINGS)
|
||||
{
|
||||
if (tryfixing & (1ull<<onumct))
|
||||
{
|
||||
sprite[i].cstat &= ~(32+16);
|
||||
OSD_Printf(CCHK_CORRECTED "auto-correction: cleared sprite[%d].cstat bits 16 and 32\n", i);
|
||||
}
|
||||
else if (1 >= printfromlev)
|
||||
OSD_Printf(" suggest clearing sprite[%d].cstat bits 16 and 32\n", i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (klabs(sprite[i].x) > BXY_MAX || klabs(sprite[i].y) > BXY_MAX)
|
||||
{
|
||||
const int32_t onumct = numcorruptthings;
|
||||
|
|
Loading…
Reference in a new issue