mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2024-11-25 21:51:09 +00:00
Merge branch 'master' of https://github.com/rheit/zdoom
This commit is contained in:
commit
4e64ad847b
52 changed files with 493 additions and 324 deletions
|
@ -37,7 +37,7 @@ In addition to the base specification ZDoom recognizes the following lumps
|
|||
between the TEXTMAP and ENDMAP lumps:
|
||||
|
||||
BEHAVIOR = contains compiled ACS code
|
||||
DIALOGUE = contains compiled Strife conversation scripts.
|
||||
DIALOGUE = contains compiled Strife or USDF conversation scripts.
|
||||
ZNODES = Nodes (must be stored as extended GL nodes. Compression is allowed
|
||||
but deprecated for portability reasons.)
|
||||
BLOCKMAP = blockmap. It is recommended not to include this lump in UDMF maps.
|
||||
|
@ -166,6 +166,14 @@ Note: All <bool> fields default to false unless mentioned otherwise.
|
|||
yscaleceiling = <float>; // Y texture scale of ceiling texture, Default = 1.0.
|
||||
rotationfloor = <float>; // Rotation of floor texture in degrees, Default = 0.0.
|
||||
rotationceiling = <float>; // Rotation of ceiling texture in degrees, Default = 0.0.
|
||||
ceilingplane_a = <float>; // Define the plane equation for the sector's ceiling. Default is a horizontal plane at 'heightceiling'.
|
||||
ceilingplane_b = <float>; // 'heightceiling' will still be used to calculate texture alignment.
|
||||
ceilingplane_c = <float>; // The plane equation will only be used if all 4 values are given.
|
||||
ceilingplane_d = <float>;
|
||||
floorplane_a = <float>; // Define the plane equation for the sector's floor. Default is a horizontal plane at 'heightfloor'.
|
||||
floorplane_b = <float>; // 'heightfloor' will still be used to calculate texture alignment.
|
||||
floorplane_c = <float>; // The plane equation will only be used if all 4 values are given.
|
||||
floorplane_d = <float>;
|
||||
lightfloor = <integer>; // The floor's light level. Default is 0.
|
||||
lightceiling = <integer>; // The ceiling's light level. Default is 0.
|
||||
lightfloorabsolute = <bool>; // true = 'lightfloor' is an absolute value. Default is
|
||||
|
@ -355,6 +363,10 @@ Added waterzone sector property.
|
|||
1.22 12.04.2014
|
||||
Added transparent line property (to be folded back to core UDMF standard), and health, score, renderstyle, fillcolor, alpha, scale, scalex, scaley, pitch and roll thing properties.
|
||||
|
||||
1.24 14.05.2014
|
||||
Added plane equations for sector slopes. (Please read carefully to ensure proper use!)
|
||||
Changed language describing the DIALOGUE lump to mention USDF as an option.
|
||||
|
||||
===============================================================================
|
||||
EOF
|
||||
===============================================================================
|
||||
|
|
|
@ -986,14 +986,10 @@ CCMD(nextmap)
|
|||
TEXTCOLOR_NORMAL " is for single-player only.\n");
|
||||
return;
|
||||
}
|
||||
char *next = NULL;
|
||||
|
||||
if (*level.nextmap)
|
||||
next = level.nextmap;
|
||||
|
||||
if (next != NULL && strncmp(next, "enDSeQ", 6))
|
||||
if (level.NextMap.Len() > 0 && level.NextMap.Compare("enDSeQ", 6))
|
||||
{
|
||||
G_DeferedInitNew(next);
|
||||
G_DeferedInitNew(level.NextMap);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1016,12 +1012,9 @@ CCMD(nextsecret)
|
|||
}
|
||||
char *next = NULL;
|
||||
|
||||
if (*level.secretmap)
|
||||
next = level.secretmap;
|
||||
|
||||
if (next != NULL && strncmp(next, "enDSeQ", 6))
|
||||
if (level.NextSecretMap.Len() > 0 && level.NextSecretMap.Compare("enDSeQ", 6))
|
||||
{
|
||||
G_DeferedInitNew(next);
|
||||
G_DeferedInitNew(level.NextSecretMap);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1107,8 +1100,8 @@ static void PrintSecretString(const char *string, bool thislevel)
|
|||
|
||||
CCMD(secret)
|
||||
{
|
||||
const char *mapname = argv.argc() < 2? level.mapname : argv[1];
|
||||
bool thislevel = !stricmp(mapname, level.mapname);
|
||||
const char *mapname = argv.argc() < 2? level.MapName.GetChars() : argv[1];
|
||||
bool thislevel = !stricmp(mapname, level.MapName);
|
||||
bool foundsome = false;
|
||||
|
||||
int lumpno=Wads.CheckNumForName("SECRETS");
|
||||
|
|
|
@ -303,7 +303,7 @@ void C_InitConback()
|
|||
|
||||
if (!conback.isValid())
|
||||
{
|
||||
conback = TexMan.GetTexture (gameinfo.titlePage, FTexture::TEX_MiscPatch);
|
||||
conback = TexMan.GetTexture (gameinfo.TitlePage, FTexture::TEX_MiscPatch);
|
||||
conshade = MAKEARGB(175,0,0,0);
|
||||
conline = true;
|
||||
}
|
||||
|
|
|
@ -1234,7 +1234,7 @@ void D_DoAdvanceDemo (void)
|
|||
static char demoname[8] = "DEMO1";
|
||||
static int democount = 0;
|
||||
static int pagecount;
|
||||
const char *pagename = NULL;
|
||||
FString pagename;
|
||||
|
||||
advancedemo = false;
|
||||
|
||||
|
@ -1299,7 +1299,7 @@ void D_DoAdvanceDemo (void)
|
|||
default:
|
||||
case 0:
|
||||
gamestate = GS_DEMOSCREEN;
|
||||
pagename = gameinfo.titlePage;
|
||||
pagename = gameinfo.TitlePage;
|
||||
pagetic = (int)(gameinfo.titleTime * TICRATE);
|
||||
S_ChangeMusic (gameinfo.titleMusic, gameinfo.titleOrder, false);
|
||||
demosequence = 3;
|
||||
|
|
|
@ -2573,7 +2573,7 @@ static void RunScript(BYTE **stream, APlayerPawn *pawn, int snum, int argn, int
|
|||
arg[i] = argval;
|
||||
}
|
||||
}
|
||||
P_StartScript(pawn, NULL, snum, level.mapname, arg, MIN<int>(countof(arg), argn), ACS_NET | always);
|
||||
P_StartScript(pawn, NULL, snum, level.MapName, arg, MIN<int>(countof(arg), argn), ACS_NET | always);
|
||||
}
|
||||
|
||||
void Net_SkipCommand (int type, BYTE **stream)
|
||||
|
|
|
@ -202,15 +202,13 @@ void FScriptLoader::ParseInfoCmd(char *line, FString &scriptsrc)
|
|||
{
|
||||
sc.MustGetStringName("=");
|
||||
sc.MustGetString();
|
||||
strncpy(level.nextmap, sc.String, 8);
|
||||
level.nextmap[8]=0;
|
||||
level.NextMap = sc.String;
|
||||
}
|
||||
else if (sc.Compare("nextsecret"))
|
||||
{
|
||||
sc.MustGetStringName("=");
|
||||
sc.MustGetString();
|
||||
strncpy(level.secretmap, sc.String, 8);
|
||||
level.secretmap[8]=0;
|
||||
level.NextSecretMap = sc.String;
|
||||
}
|
||||
else if (sc.Compare("drown"))
|
||||
{
|
||||
|
|
|
@ -1621,7 +1621,7 @@ void G_DoReborn (int playernum, bool freshbot)
|
|||
{ // Reload the level from scratch
|
||||
bool indemo = demoplayback;
|
||||
BackupSaveName = "";
|
||||
G_InitNew (level.mapname, false);
|
||||
G_InitNew (level.MapName, false);
|
||||
demoplayback = indemo;
|
||||
// gameaction = ga_loadlevel;
|
||||
}
|
||||
|
@ -2027,7 +2027,7 @@ static void PutSaveComment (FILE *file)
|
|||
|
||||
// Get level name
|
||||
//strcpy (comment, level.level_name);
|
||||
mysnprintf(comment, countof(comment), "%s - %s", level.mapname, level.LevelName.GetChars());
|
||||
mysnprintf(comment, countof(comment), "%s - %s", level.MapName.GetChars(), level.LevelName.GetChars());
|
||||
len = (WORD)strlen (comment);
|
||||
comment[len] = '\n';
|
||||
|
||||
|
@ -2088,7 +2088,7 @@ void G_DoSaveGame (bool okForQuicksave, FString filename, const char *descriptio
|
|||
M_AppendPNGText (stdfile, "Engine", GAMESIG);
|
||||
M_AppendPNGText (stdfile, "ZDoom Save Version", SAVESIG);
|
||||
M_AppendPNGText (stdfile, "Title", description);
|
||||
M_AppendPNGText (stdfile, "Current Map", level.mapname);
|
||||
M_AppendPNGText (stdfile, "Current Map", level.MapName);
|
||||
PutSaveWads (stdfile);
|
||||
PutSaveComment (stdfile);
|
||||
|
||||
|
@ -2289,7 +2289,7 @@ void G_BeginRecording (const char *startmap)
|
|||
|
||||
if (startmap == NULL)
|
||||
{
|
||||
startmap = level.mapname;
|
||||
startmap = level.MapName;
|
||||
}
|
||||
demo_p = demobuffer;
|
||||
|
||||
|
|
|
@ -88,7 +88,7 @@ void AHeresiarch::Die (AActor *source, AActor *inflictor, int dmgflags)
|
|||
|
||||
if (script != 0)
|
||||
{
|
||||
P_StartScript (this, NULL, script, level.mapname, NULL, 0, 0);
|
||||
P_StartScript (this, NULL, script, level.MapName, NULL, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -445,10 +445,7 @@ void G_InitNew (const char *mapname, bool bTitleLevel)
|
|||
bglobal.Init ();
|
||||
}
|
||||
|
||||
if (mapname != level.mapname)
|
||||
{
|
||||
strcpy (level.mapname, mapname);
|
||||
}
|
||||
level.MapName = mapname;
|
||||
if (bTitleLevel)
|
||||
{
|
||||
gamestate = GS_TITLELEVEL;
|
||||
|
@ -491,9 +488,9 @@ void G_ChangeLevel(const char *levelname, int position, int flags, int nextSkill
|
|||
{
|
||||
// end the game
|
||||
levelname = NULL;
|
||||
if (!strncmp(level.nextmap, "enDSeQ",6))
|
||||
if (!level.NextMap.Compare("enDSeQ",6))
|
||||
{
|
||||
levelname = level.nextmap; // If there is already an end sequence please leave it alone!
|
||||
nextlevel = level.NextMap; // If there is already an end sequence please leave it alone!
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -509,12 +506,14 @@ void G_ChangeLevel(const char *levelname, int position, int flags, int nextSkill
|
|||
if (nextredir != NULL)
|
||||
{
|
||||
nextinfo = nextredir;
|
||||
levelname = nextinfo->mapname;
|
||||
}
|
||||
}
|
||||
nextlevel = nextinfo->MapName;
|
||||
}
|
||||
else
|
||||
{
|
||||
nextlevel = levelname;
|
||||
}
|
||||
|
||||
if (levelname != NULL) nextlevel = levelname;
|
||||
|
||||
if (nextSkill != -1)
|
||||
NextSkill = nextSkill;
|
||||
|
@ -596,18 +595,18 @@ void G_ChangeLevel(const char *levelname, int position, int flags, int nextSkill
|
|||
|
||||
const char *G_GetExitMap()
|
||||
{
|
||||
return level.nextmap;
|
||||
return level.NextMap;
|
||||
}
|
||||
|
||||
const char *G_GetSecretExitMap()
|
||||
{
|
||||
const char *nextmap = level.nextmap;
|
||||
const char *nextmap = level.NextMap;
|
||||
|
||||
if (level.secretmap[0] != 0)
|
||||
if (level.NextSecretMap.Len() > 0)
|
||||
{
|
||||
if (P_CheckMapData(level.secretmap))
|
||||
if (P_CheckMapData(level.NextSecretMap))
|
||||
{
|
||||
nextmap = level.secretmap;
|
||||
nextmap = level.NextSecretMap;
|
||||
}
|
||||
}
|
||||
return nextmap;
|
||||
|
@ -641,7 +640,7 @@ void G_DoCompleted (void)
|
|||
|
||||
if (gamestate == GS_TITLELEVEL)
|
||||
{
|
||||
strncpy (level.mapname, nextlevel, 255);
|
||||
level.MapName = nextlevel;
|
||||
G_DoLoadLevel (startpos, false);
|
||||
startpos = 0;
|
||||
viewactive = true;
|
||||
|
@ -650,20 +649,20 @@ void G_DoCompleted (void)
|
|||
|
||||
// [RH] Mark this level as having been visited
|
||||
if (!(level.flags & LEVEL_CHANGEMAPCHEAT))
|
||||
FindLevelInfo (level.mapname)->flags |= LEVEL_VISITED;
|
||||
FindLevelInfo (level.MapName)->flags |= LEVEL_VISITED;
|
||||
|
||||
if (automapactive)
|
||||
AM_Stop ();
|
||||
|
||||
wminfo.finished_ep = level.cluster - 1;
|
||||
wminfo.LName0 = TexMan[TexMan.CheckForTexture(level.info->pname, FTexture::TEX_MiscPatch)];
|
||||
wminfo.current = level.mapname;
|
||||
wminfo.LName0 = TexMan[TexMan.CheckForTexture(level.info->PName, FTexture::TEX_MiscPatch)];
|
||||
wminfo.current = level.MapName;
|
||||
|
||||
if (deathmatch &&
|
||||
(dmflags & DF_SAME_LEVEL) &&
|
||||
!(level.flags & LEVEL_CHANGEMAPCHEAT))
|
||||
{
|
||||
wminfo.next = level.mapname;
|
||||
wminfo.next = level.MapName;
|
||||
wminfo.LName1 = wminfo.LName0;
|
||||
}
|
||||
else
|
||||
|
@ -676,8 +675,8 @@ void G_DoCompleted (void)
|
|||
}
|
||||
else
|
||||
{
|
||||
wminfo.next = nextinfo->mapname;
|
||||
wminfo.LName1 = TexMan[TexMan.CheckForTexture(nextinfo->pname, FTexture::TEX_MiscPatch)];
|
||||
wminfo.next = nextinfo->MapName;
|
||||
wminfo.LName1 = TexMan[TexMan.CheckForTexture(nextinfo->PName, FTexture::TEX_MiscPatch)];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -850,7 +849,7 @@ void G_DoLoadLevel (int position, bool autosave)
|
|||
"\n\35\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36"
|
||||
"\36\36\36\36\36\36\36\36\36\36\36\36\37\n\n"
|
||||
TEXTCOLOR_BOLD "%s - %s\n\n",
|
||||
level.mapname, level.LevelName.GetChars());
|
||||
level.MapName.GetChars(), level.LevelName.GetChars());
|
||||
|
||||
if (wipegamestate == GS_LEVEL)
|
||||
wipegamestate = GS_FORCEWIPE;
|
||||
|
@ -899,7 +898,7 @@ void G_DoLoadLevel (int position, bool autosave)
|
|||
}
|
||||
|
||||
level.maptime = 0;
|
||||
P_SetupLevel (level.mapname, position);
|
||||
P_SetupLevel (level.MapName, position);
|
||||
|
||||
AM_LevelInit();
|
||||
|
||||
|
@ -1056,7 +1055,7 @@ void G_DoWorldDone (void)
|
|||
}
|
||||
else
|
||||
{
|
||||
strncpy (level.mapname, nextlevel, 255);
|
||||
level.MapName = nextlevel;
|
||||
}
|
||||
G_StartTravel ();
|
||||
G_DoLoadLevel (startpos, true);
|
||||
|
@ -1217,7 +1216,7 @@ void G_InitLevelLocals ()
|
|||
level.flags = 0;
|
||||
level.flags2 = 0;
|
||||
|
||||
info = FindLevelInfo (level.mapname);
|
||||
info = FindLevelInfo (level.MapName);
|
||||
|
||||
level.info = info;
|
||||
level.skyspeed1 = info->skyspeed1;
|
||||
|
@ -1274,10 +1273,8 @@ void G_InitLevelLocals ()
|
|||
level.musicorder = info->musicorder;
|
||||
|
||||
level.LevelName = level.info->LookupLevelName();
|
||||
strncpy (level.nextmap, info->nextmap, 10);
|
||||
level.nextmap[10] = 0;
|
||||
strncpy (level.secretmap, info->secretmap, 10);
|
||||
level.secretmap[10] = 0;
|
||||
level.NextMap = info->NextMap;
|
||||
level.NextSecretMap = info->NextSecretMap;
|
||||
|
||||
compatflags.Callback();
|
||||
compatflags2.Callback();
|
||||
|
@ -1621,7 +1618,7 @@ static void writeMapName (FArchive &arc, const char *name)
|
|||
static void writeSnapShot (FArchive &arc, level_info_t *i)
|
||||
{
|
||||
arc << i->snapshotVer;
|
||||
writeMapName (arc, i->mapname);
|
||||
writeMapName (arc, i->MapName);
|
||||
i->snapshot->Serialize (arc);
|
||||
}
|
||||
|
||||
|
@ -1659,7 +1656,7 @@ void G_WriteSnapshots (FILE *file)
|
|||
{
|
||||
arc = new FPNGChunkArchive (file, VIST_ID);
|
||||
}
|
||||
writeMapName (*arc, wadlevelinfos[i].mapname);
|
||||
writeMapName (*arc, wadlevelinfos[i].MapName);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1798,7 +1795,7 @@ CCMD(listsnapshots)
|
|||
{
|
||||
unsigned int comp, uncomp;
|
||||
snapshot->GetSizes(comp, uncomp);
|
||||
Printf("%s (%u -> %u bytes)\n", wadlevelinfos[i].mapname, comp, uncomp);
|
||||
Printf("%s (%u -> %u bytes)\n", wadlevelinfos[i].MapName.GetChars(), comp, uncomp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1810,7 +1807,7 @@ CCMD(listsnapshots)
|
|||
|
||||
static void writeDefereds (FArchive &arc, level_info_t *i)
|
||||
{
|
||||
writeMapName (arc, i->mapname);
|
||||
writeMapName (arc, i->MapName);
|
||||
arc << i->defered;
|
||||
}
|
||||
|
||||
|
@ -1922,11 +1919,11 @@ CCMD(listmaps)
|
|||
for(unsigned i = 0; i < wadlevelinfos.Size(); i++)
|
||||
{
|
||||
level_info_t *info = &wadlevelinfos[i];
|
||||
MapData *map = P_OpenMapData(info->mapname, true);
|
||||
MapData *map = P_OpenMapData(info->MapName, true);
|
||||
|
||||
if (map != NULL)
|
||||
{
|
||||
Printf("%s: '%s' (%s)\n", info->mapname, info->LookupLevelName().GetChars(),
|
||||
Printf("%s: '%s' (%s)\n", info->MapName.GetChars(), info->LookupLevelName().GetChars(),
|
||||
Wads.GetWadName(Wads.GetLumpFile(map->lumpnum)));
|
||||
delete map;
|
||||
}
|
||||
|
|
|
@ -83,7 +83,7 @@ struct FMapInfoParser
|
|||
void ParseLumpOrTextureName(FString &name);
|
||||
|
||||
void ParseCluster();
|
||||
void ParseNextMap(char *mapname);
|
||||
void ParseNextMap(FString &mapname);
|
||||
level_info_t *ParseMapHeader(level_info_t &defaultinfo);
|
||||
void ParseMapDefinition(level_info_t &leveldef);
|
||||
void ParseGameInfo();
|
||||
|
@ -269,10 +269,10 @@ struct level_info_t
|
|||
{
|
||||
int levelnum;
|
||||
|
||||
char mapname[9];
|
||||
char pname[9];
|
||||
char nextmap[11];
|
||||
char secretmap[11];
|
||||
FString MapName;
|
||||
FString NextMap;
|
||||
FString NextSecretMap;
|
||||
FString PName;
|
||||
FString SkyPic1;
|
||||
FString SkyPic2;
|
||||
FString FadeTable;
|
||||
|
@ -313,7 +313,7 @@ struct level_info_t
|
|||
// Redirection: If any player is carrying the specified item, then
|
||||
// you go to the RedirectMap instead of this one.
|
||||
FName RedirectType;
|
||||
char RedirectMap[9];
|
||||
FString RedirectMapName;
|
||||
|
||||
FString EnterPic;
|
||||
FString ExitPic;
|
||||
|
@ -391,9 +391,9 @@ struct FLevelLocals
|
|||
int levelnum;
|
||||
int lumpnum;
|
||||
FString LevelName;
|
||||
char mapname[256]; // the lump name (E1M1, MAP01, etc)
|
||||
char nextmap[11]; // go here when using the regular exit
|
||||
char secretmap[11]; // map to go to when used secret exit
|
||||
FString MapName; // the lump name (E1M1, MAP01, etc)
|
||||
FString NextMap; // go here when using the regular exit
|
||||
FString NextSecretMap; // map to go to when used secret exit
|
||||
EMapType maptype;
|
||||
|
||||
DWORD flags;
|
||||
|
|
|
@ -71,9 +71,10 @@ extern TMap<int, FString> HexenMusic;
|
|||
static int FindWadLevelInfo (const char *name)
|
||||
{
|
||||
for (unsigned int i = 0; i < wadlevelinfos.Size(); i++)
|
||||
if (!strnicmp (name, wadlevelinfos[i].mapname, 8))
|
||||
{
|
||||
if (!wadlevelinfos[i].MapName.CompareNoCase(name))
|
||||
return i;
|
||||
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -144,7 +145,7 @@ bool CheckWarpTransMap (FString &mapname, bool substitute)
|
|||
level_info_t *lev = FindLevelByWarpTrans (atoi (&mapname[4]));
|
||||
if (lev != NULL)
|
||||
{
|
||||
mapname = lev->mapname;
|
||||
mapname = lev->MapName;
|
||||
return true;
|
||||
}
|
||||
else if (substitute)
|
||||
|
@ -224,12 +225,12 @@ void P_RemoveDefereds (void)
|
|||
|
||||
void level_info_t::Reset()
|
||||
{
|
||||
mapname[0] = 0;
|
||||
MapName = "";
|
||||
MapBackground = "";
|
||||
levelnum = 0;
|
||||
pname[0] = 0;
|
||||
nextmap[0] = 0;
|
||||
secretmap[0] = 0;
|
||||
PName = "";
|
||||
NextMap = "";
|
||||
NextSecretMap = "";
|
||||
SkyPic1 = SkyPic2 = "-NOFLAT-";
|
||||
cluster = 0;
|
||||
partime = 0;
|
||||
|
@ -262,7 +263,7 @@ void level_info_t::Reset()
|
|||
compatmask = compatmask2 = 0;
|
||||
Translator = "";
|
||||
RedirectType = 0;
|
||||
RedirectMap[0] = 0;
|
||||
RedirectMapName = "";
|
||||
EnterPic = "";
|
||||
ExitPic = "";
|
||||
InterMusic = "";
|
||||
|
@ -299,17 +300,17 @@ FString level_info_t::LookupLevelName()
|
|||
char checkstring[32];
|
||||
|
||||
// Strip out the header from the localized string
|
||||
if (mapname[0] == 'E' && mapname[2] == 'M')
|
||||
if (MapName.Len() > 3 && MapName[0] == 'E' && MapName[2] == 'M')
|
||||
{
|
||||
mysnprintf (checkstring, countof(checkstring), "%s: ", mapname);
|
||||
mysnprintf (checkstring, countof(checkstring), "%s: ", MapName.GetChars());
|
||||
}
|
||||
else if (mapname[0] == 'M' && mapname[1] == 'A' && mapname[2] == 'P')
|
||||
else if (MapName.Len() > 3 && MapName[0] == 'M' && MapName[1] == 'A' && MapName[2] == 'P')
|
||||
{
|
||||
mysnprintf (checkstring, countof(checkstring), "%d: ", atoi(mapname + 3));
|
||||
mysnprintf (checkstring, countof(checkstring), "%d: ", atoi(&MapName[3]));
|
||||
}
|
||||
else if (mapname[0] == 'L' && mapname[1] == 'E' && mapname[2] == 'V' && mapname[3] == 'E' && mapname[4] == 'L')
|
||||
else if (MapName.Len() > 5 && MapName[0] == 'L' && MapName[1] == 'E' && MapName[2] == 'V' && MapName[3] == 'E' && MapName[4] == 'L')
|
||||
{
|
||||
mysnprintf (checkstring, countof(checkstring), "%d: ", atoi(mapname + 5));
|
||||
mysnprintf (checkstring, countof(checkstring), "%d: ", atoi(&MapName[5]));
|
||||
}
|
||||
thename = strstr (lookedup, checkstring);
|
||||
if (thename == NULL)
|
||||
|
@ -372,9 +373,9 @@ level_info_t *level_info_t::CheckLevelRedirect ()
|
|||
if (playeringame[i] && players[i].mo->FindInventory (type))
|
||||
{
|
||||
// check for actual presence of the map.
|
||||
if (P_CheckMapData(RedirectMap))
|
||||
if (P_CheckMapData(RedirectMapName))
|
||||
{
|
||||
return FindLevelInfo(RedirectMap);
|
||||
return FindLevelInfo(RedirectMapName);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -391,7 +392,7 @@ level_info_t *level_info_t::CheckLevelRedirect ()
|
|||
|
||||
bool level_info_t::isValid()
|
||||
{
|
||||
return mapname[0] != 0 || this == &TheDefaultLevelInfo;
|
||||
return MapName.Len() != 0 || this == &TheDefaultLevelInfo;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
|
@ -764,29 +765,27 @@ void FMapInfoParser::ParseCluster()
|
|||
//
|
||||
//==========================================================================
|
||||
|
||||
void FMapInfoParser::ParseNextMap(char *mapname)
|
||||
void FMapInfoParser::ParseNextMap(FString &mapname)
|
||||
{
|
||||
if (sc.CheckNumber())
|
||||
{
|
||||
if (HexenHack)
|
||||
{
|
||||
mysnprintf (mapname, 9, "&wt@%02d", sc.Number);
|
||||
mapname.Format("&wt@%02d", sc.Number);
|
||||
}
|
||||
else
|
||||
{
|
||||
mysnprintf (mapname, 9, "MAP%02d", sc.Number);
|
||||
mapname.Format("MAP%02d", sc.Number);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
*mapname = 0;
|
||||
sc.MustGetString();
|
||||
strncpy (mapname, sc.String, 8);
|
||||
mapname[8] = 0;
|
||||
mapname = sc.String;
|
||||
FName seq = CheckEndSequence();
|
||||
if (seq != NAME_None)
|
||||
{
|
||||
mysnprintf(mapname, 11, "enDSeQ%04x", int(seq));
|
||||
mapname.Format("enDSeQ%04x", int(seq));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -807,19 +806,19 @@ DEFINE_MAP_OPTION(levelnum, true)
|
|||
DEFINE_MAP_OPTION(next, true)
|
||||
{
|
||||
parse.ParseAssign();
|
||||
parse.ParseNextMap(info->nextmap);
|
||||
parse.ParseNextMap(info->NextMap);
|
||||
}
|
||||
|
||||
DEFINE_MAP_OPTION(secretnext, true)
|
||||
{
|
||||
parse.ParseAssign();
|
||||
parse.ParseNextMap(info->secretmap);
|
||||
parse.ParseNextMap(info->NextSecretMap);
|
||||
}
|
||||
|
||||
DEFINE_MAP_OPTION(secret, true) // Just an alias for secretnext, for Vavoom compatibility
|
||||
{
|
||||
parse.ParseAssign();
|
||||
parse.ParseNextMap(info->secretmap);
|
||||
parse.ParseNextMap(info->NextSecretMap);
|
||||
}
|
||||
|
||||
DEFINE_MAP_OPTION(cluster, true)
|
||||
|
@ -898,7 +897,7 @@ DEFINE_MAP_OPTION(outsidefog, true)
|
|||
DEFINE_MAP_OPTION(titlepatch, true)
|
||||
{
|
||||
parse.ParseAssign();
|
||||
parse.ParseLumpOrTextureName(info->pname);
|
||||
parse.ParseLumpOrTextureName(info->PName);
|
||||
}
|
||||
|
||||
DEFINE_MAP_OPTION(partime, true)
|
||||
|
@ -1072,7 +1071,7 @@ DEFINE_MAP_OPTION(redirect, true)
|
|||
parse.sc.MustGetString();
|
||||
info->RedirectType = parse.sc.String;
|
||||
parse.ParseComma();
|
||||
parse.ParseLumpOrTextureName(info->RedirectMap);
|
||||
parse.ParseNextMap(info->RedirectMapName);
|
||||
}
|
||||
|
||||
DEFINE_MAP_OPTION(sndseq, true)
|
||||
|
@ -1522,8 +1521,8 @@ level_info_t *FMapInfoParser::ParseMapHeader(level_info_t &defaultinfo)
|
|||
|
||||
}
|
||||
|
||||
uppercopy (levelinfo->mapname, mapname);
|
||||
levelinfo->mapname[8] = 0;
|
||||
levelinfo->MapName = mapname;
|
||||
levelinfo->MapName.ToUpper();
|
||||
sc.MustGetString ();
|
||||
if (sc.String[0] == '$')
|
||||
{
|
||||
|
@ -1543,7 +1542,7 @@ level_info_t *FMapInfoParser::ParseMapHeader(level_info_t &defaultinfo)
|
|||
|
||||
// Set up levelnum now so that you can use Teleport_NewMap specials
|
||||
// to teleport to maps with standard names without needing a levelnum.
|
||||
levelinfo->levelnum = GetDefaultLevelNum(levelinfo->mapname);
|
||||
levelinfo->levelnum = GetDefaultLevelNum(levelinfo->MapName);
|
||||
|
||||
// Does this map have a song defined via SNDINFO's $map command?
|
||||
// Set that as this map's default music if it does.
|
||||
|
|
|
@ -42,9 +42,9 @@ void ABasicArmor::Tick ()
|
|||
AbsorbCount = 0;
|
||||
if (!Icon.isValid())
|
||||
{
|
||||
const char *icon = gameinfo.ArmorIcon1;
|
||||
FString icon = gameinfo.ArmorIcon1;
|
||||
|
||||
if (SavePercent >= gameinfo.Armor2Percent && gameinfo.ArmorIcon2[0] != 0)
|
||||
if (SavePercent >= gameinfo.Armor2Percent && gameinfo.ArmorIcon2.Len() != 0)
|
||||
icon = gameinfo.ArmorIcon2;
|
||||
|
||||
if (icon[0] != 0)
|
||||
|
|
|
@ -605,7 +605,13 @@ void APowerInvisibility::DoEffect ()
|
|||
case (NAME_Stencil):
|
||||
Owner->RenderStyle = STYLE_Stencil;
|
||||
break;
|
||||
case (NAME_None):
|
||||
case (NAME_AddStencil) :
|
||||
Owner->RenderStyle = STYLE_AddStencil;
|
||||
break;
|
||||
case (NAME_TranslucentStencil) :
|
||||
Owner->RenderStyle = STYLE_TranslucentStencil;
|
||||
break;
|
||||
case (NAME_None) :
|
||||
case (NAME_Cumulative):
|
||||
case (NAME_Translucent):
|
||||
Owner->RenderStyle = STYLE_Translucent;
|
||||
|
@ -685,7 +691,13 @@ int APowerInvisibility::AlterWeaponSprite (visstyle_t *vis)
|
|||
case (NAME_Stencil):
|
||||
vis->RenderStyle = STYLE_Stencil;
|
||||
break;
|
||||
case (NAME_None):
|
||||
case (NAME_TranslucentStencil) :
|
||||
vis->RenderStyle = STYLE_TranslucentStencil;
|
||||
break;
|
||||
case (NAME_AddStencil) :
|
||||
vis->RenderStyle = STYLE_AddStencil;
|
||||
break;
|
||||
case (NAME_None) :
|
||||
case (NAME_Cumulative):
|
||||
case (NAME_Translucent):
|
||||
default:
|
||||
|
|
|
@ -82,10 +82,22 @@ void ASectorAction::Deactivate (AActor *source)
|
|||
flags2 |= MF2_DORMANT; // Projectiles can trigger
|
||||
}
|
||||
|
||||
bool ASectorAction::TriggerAction (AActor *triggerer, int activationType)
|
||||
bool ASectorAction::TriggerAction(AActor *triggerer, int activationType)
|
||||
{
|
||||
if (DoTriggerAction(triggerer, activationType))
|
||||
{
|
||||
if (flags4 & MF4_STANDSTILL)
|
||||
{
|
||||
Destroy();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ASectorAction::DoTriggerAction (AActor *triggerer, int activationType)
|
||||
{
|
||||
if (tracer != NULL)
|
||||
return barrier_cast<ASectorAction *>(tracer)->TriggerAction (triggerer, activationType);
|
||||
return barrier_cast<ASectorAction *>(tracer)->DoTriggerAction (triggerer, activationType);
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
@ -93,7 +105,7 @@ bool ASectorAction::TriggerAction (AActor *triggerer, int activationType)
|
|||
bool ASectorAction::CheckTrigger (AActor *triggerer) const
|
||||
{
|
||||
if (special &&
|
||||
(triggerer->player ||
|
||||
((triggerer->player && !(flags & MF_FRIENDLY)) ||
|
||||
((flags & MF_AMBUSH) && (triggerer->flags2 & MF2_MCROSS)) ||
|
||||
((flags2 & MF2_DORMANT) && (triggerer->flags2 & MF2_PCROSS))))
|
||||
{
|
||||
|
@ -110,16 +122,16 @@ class ASecActEnter : public ASectorAction
|
|||
{
|
||||
DECLARE_CLASS (ASecActEnter, ASectorAction)
|
||||
public:
|
||||
bool TriggerAction (AActor *triggerer, int activationType);
|
||||
bool DoTriggerAction (AActor *triggerer, int activationType);
|
||||
};
|
||||
|
||||
IMPLEMENT_CLASS (ASecActEnter)
|
||||
|
||||
|
||||
bool ASecActEnter::TriggerAction (AActor *triggerer, int activationType)
|
||||
bool ASecActEnter::DoTriggerAction (AActor *triggerer, int activationType)
|
||||
{
|
||||
bool didit = (activationType & SECSPAC_Enter) ? CheckTrigger (triggerer) : false;
|
||||
return didit | Super::TriggerAction (triggerer, activationType);
|
||||
return didit | Super::DoTriggerAction (triggerer, activationType);
|
||||
}
|
||||
|
||||
// Triggered when leaving sector --------------------------------------------
|
||||
|
@ -128,16 +140,16 @@ class ASecActExit : public ASectorAction
|
|||
{
|
||||
DECLARE_CLASS (ASecActExit, ASectorAction)
|
||||
public:
|
||||
bool TriggerAction (AActor *triggerer, int activationType);
|
||||
bool DoTriggerAction (AActor *triggerer, int activationType);
|
||||
};
|
||||
|
||||
IMPLEMENT_CLASS (ASecActExit)
|
||||
|
||||
|
||||
bool ASecActExit::TriggerAction (AActor *triggerer, int activationType)
|
||||
bool ASecActExit::DoTriggerAction (AActor *triggerer, int activationType)
|
||||
{
|
||||
bool didit = (activationType & SECSPAC_Exit) ? CheckTrigger (triggerer) : false;
|
||||
return didit | Super::TriggerAction (triggerer, activationType);
|
||||
return didit | Super::DoTriggerAction (triggerer, activationType);
|
||||
}
|
||||
|
||||
// Triggered when hitting sector's floor ------------------------------------
|
||||
|
@ -146,7 +158,7 @@ class ASecActHitFloor : public ASectorAction
|
|||
{
|
||||
DECLARE_CLASS (ASecActHitFloor, ASectorAction)
|
||||
public:
|
||||
bool TriggerAction (AActor *triggerer, int activationType);
|
||||
bool DoTriggerAction (AActor *triggerer, int activationType);
|
||||
};
|
||||
|
||||
// Skull Tag uses 9999 for a special that is triggered whenever
|
||||
|
@ -154,10 +166,10 @@ public:
|
|||
IMPLEMENT_CLASS (ASecActHitFloor)
|
||||
|
||||
|
||||
bool ASecActHitFloor::TriggerAction (AActor *triggerer, int activationType)
|
||||
bool ASecActHitFloor::DoTriggerAction (AActor *triggerer, int activationType)
|
||||
{
|
||||
bool didit = (activationType & SECSPAC_HitFloor) ? CheckTrigger (triggerer) : false;
|
||||
return didit | Super::TriggerAction (triggerer, activationType);
|
||||
return didit | Super::DoTriggerAction (triggerer, activationType);
|
||||
}
|
||||
|
||||
// Triggered when hitting sector's ceiling ----------------------------------
|
||||
|
@ -166,16 +178,16 @@ class ASecActHitCeil : public ASectorAction
|
|||
{
|
||||
DECLARE_CLASS (ASecActHitCeil, ASectorAction)
|
||||
public:
|
||||
bool TriggerAction (AActor *triggerer, int activationType);
|
||||
bool DoTriggerAction (AActor *triggerer, int activationType);
|
||||
};
|
||||
|
||||
IMPLEMENT_CLASS (ASecActHitCeil)
|
||||
|
||||
|
||||
bool ASecActHitCeil::TriggerAction (AActor *triggerer, int activationType)
|
||||
bool ASecActHitCeil::DoTriggerAction (AActor *triggerer, int activationType)
|
||||
{
|
||||
bool didit = (activationType & SECSPAC_HitCeiling) ? CheckTrigger (triggerer) : false;
|
||||
return didit | Super::TriggerAction (triggerer, activationType);
|
||||
return didit | Super::DoTriggerAction (triggerer, activationType);
|
||||
}
|
||||
|
||||
// Triggered when using inside sector ---------------------------------------
|
||||
|
@ -184,16 +196,16 @@ class ASecActUse : public ASectorAction
|
|||
{
|
||||
DECLARE_CLASS (ASecActUse, ASectorAction)
|
||||
public:
|
||||
bool TriggerAction (AActor *triggerer, int activationType);
|
||||
bool DoTriggerAction (AActor *triggerer, int activationType);
|
||||
};
|
||||
|
||||
IMPLEMENT_CLASS (ASecActUse)
|
||||
|
||||
|
||||
bool ASecActUse::TriggerAction (AActor *triggerer, int activationType)
|
||||
bool ASecActUse::DoTriggerAction (AActor *triggerer, int activationType)
|
||||
{
|
||||
bool didit = (activationType & SECSPAC_Use) ? CheckTrigger (triggerer) : false;
|
||||
return didit | Super::TriggerAction (triggerer, activationType);
|
||||
return didit | Super::DoTriggerAction (triggerer, activationType);
|
||||
}
|
||||
|
||||
// Triggered when using a sector's wall -------------------------------------
|
||||
|
@ -202,16 +214,16 @@ class ASecActUseWall : public ASectorAction
|
|||
{
|
||||
DECLARE_CLASS (ASecActUseWall, ASectorAction)
|
||||
public:
|
||||
bool TriggerAction (AActor *triggerer, int activationType);
|
||||
bool DoTriggerAction (AActor *triggerer, int activationType);
|
||||
};
|
||||
|
||||
IMPLEMENT_CLASS (ASecActUseWall)
|
||||
|
||||
|
||||
bool ASecActUseWall::TriggerAction (AActor *triggerer, int activationType)
|
||||
bool ASecActUseWall::DoTriggerAction (AActor *triggerer, int activationType)
|
||||
{
|
||||
bool didit = (activationType & SECSPAC_UseWall) ? CheckTrigger (triggerer) : false;
|
||||
return didit | Super::TriggerAction (triggerer, activationType);
|
||||
return didit | Super::DoTriggerAction (triggerer, activationType);
|
||||
}
|
||||
|
||||
// Triggered when eyes go below fake floor ----------------------------------
|
||||
|
@ -220,16 +232,16 @@ class ASecActEyesDive : public ASectorAction
|
|||
{
|
||||
DECLARE_CLASS (ASecActEyesDive, ASectorAction)
|
||||
public:
|
||||
bool TriggerAction (AActor *triggerer, int activationType);
|
||||
bool DoTriggerAction (AActor *triggerer, int activationType);
|
||||
};
|
||||
|
||||
IMPLEMENT_CLASS (ASecActEyesDive)
|
||||
|
||||
|
||||
bool ASecActEyesDive::TriggerAction (AActor *triggerer, int activationType)
|
||||
bool ASecActEyesDive::DoTriggerAction (AActor *triggerer, int activationType)
|
||||
{
|
||||
bool didit = (activationType & SECSPAC_EyesDive) ? CheckTrigger (triggerer) : false;
|
||||
return didit | Super::TriggerAction (triggerer, activationType);
|
||||
return didit | Super::DoTriggerAction (triggerer, activationType);
|
||||
}
|
||||
|
||||
// Triggered when eyes go above fake floor ----------------------------------
|
||||
|
@ -238,16 +250,16 @@ class ASecActEyesSurface : public ASectorAction
|
|||
{
|
||||
DECLARE_CLASS (ASecActEyesSurface, ASectorAction)
|
||||
public:
|
||||
bool TriggerAction (AActor *triggerer, int activationType);
|
||||
bool DoTriggerAction (AActor *triggerer, int activationType);
|
||||
};
|
||||
|
||||
IMPLEMENT_CLASS (ASecActEyesSurface)
|
||||
|
||||
|
||||
bool ASecActEyesSurface::TriggerAction (AActor *triggerer, int activationType)
|
||||
bool ASecActEyesSurface::DoTriggerAction (AActor *triggerer, int activationType)
|
||||
{
|
||||
bool didit = (activationType & SECSPAC_EyesSurface) ? CheckTrigger (triggerer) : false;
|
||||
return didit | Super::TriggerAction (triggerer, activationType);
|
||||
return didit | Super::DoTriggerAction (triggerer, activationType);
|
||||
}
|
||||
|
||||
// Triggered when eyes go below fake floor ----------------------------------
|
||||
|
@ -256,16 +268,16 @@ class ASecActEyesBelowC : public ASectorAction
|
|||
{
|
||||
DECLARE_CLASS (ASecActEyesBelowC, ASectorAction)
|
||||
public:
|
||||
bool TriggerAction (AActor *triggerer, int activationType);
|
||||
bool DoTriggerAction (AActor *triggerer, int activationType);
|
||||
};
|
||||
|
||||
IMPLEMENT_CLASS (ASecActEyesBelowC)
|
||||
|
||||
|
||||
bool ASecActEyesBelowC::TriggerAction (AActor *triggerer, int activationType)
|
||||
bool ASecActEyesBelowC::DoTriggerAction (AActor *triggerer, int activationType)
|
||||
{
|
||||
bool didit = (activationType & SECSPAC_EyesBelowC) ? CheckTrigger (triggerer) : false;
|
||||
return didit | Super::TriggerAction (triggerer, activationType);
|
||||
return didit | Super::DoTriggerAction (triggerer, activationType);
|
||||
}
|
||||
|
||||
// Triggered when eyes go above fake floor ----------------------------------
|
||||
|
@ -274,16 +286,16 @@ class ASecActEyesAboveC : public ASectorAction
|
|||
{
|
||||
DECLARE_CLASS (ASecActEyesAboveC, ASectorAction)
|
||||
public:
|
||||
bool TriggerAction (AActor *triggerer, int activationType);
|
||||
bool DoTriggerAction (AActor *triggerer, int activationType);
|
||||
};
|
||||
|
||||
IMPLEMENT_CLASS (ASecActEyesAboveC)
|
||||
|
||||
|
||||
bool ASecActEyesAboveC::TriggerAction (AActor *triggerer, int activationType)
|
||||
bool ASecActEyesAboveC::DoTriggerAction (AActor *triggerer, int activationType)
|
||||
{
|
||||
bool didit = (activationType & SECSPAC_EyesAboveC) ? CheckTrigger (triggerer) : false;
|
||||
return didit | Super::TriggerAction (triggerer, activationType);
|
||||
return didit | Super::DoTriggerAction (triggerer, activationType);
|
||||
}
|
||||
|
||||
// Triggered when eyes go below fake floor ----------------------------------
|
||||
|
@ -292,14 +304,14 @@ class ASecActHitFakeFloor : public ASectorAction
|
|||
{
|
||||
DECLARE_CLASS (ASecActHitFakeFloor, ASectorAction)
|
||||
public:
|
||||
bool TriggerAction (AActor *triggerer, int activationType);
|
||||
bool DoTriggerAction (AActor *triggerer, int activationType);
|
||||
};
|
||||
|
||||
IMPLEMENT_CLASS (ASecActHitFakeFloor)
|
||||
|
||||
|
||||
bool ASecActHitFakeFloor::TriggerAction (AActor *triggerer, int activationType)
|
||||
bool ASecActHitFakeFloor::DoTriggerAction (AActor *triggerer, int activationType)
|
||||
{
|
||||
bool didit = (activationType & SECSPAC_HitFakeFloor) ? CheckTrigger (triggerer) : false;
|
||||
return didit | Super::TriggerAction (triggerer, activationType);
|
||||
return didit | Super::DoTriggerAction (triggerer, activationType);
|
||||
}
|
||||
|
|
|
@ -300,7 +300,7 @@ class CommandDrawImage : public SBarInfoCommandFlowControl
|
|||
|
||||
if (flags & DI_ALTERNATEONFAIL)
|
||||
{
|
||||
SetTruth(texture == NULL || !(texture->GetID().isValid()), block, statusBar);
|
||||
SetTruth(texture == NULL || texture->UseType == FTexture::TEX_Null, block, statusBar);
|
||||
}
|
||||
}
|
||||
protected:
|
||||
|
@ -830,7 +830,7 @@ class CommandDrawString : public SBarInfoCommand
|
|||
if(level.lumpnum != cache)
|
||||
{
|
||||
cache = level.lumpnum;
|
||||
str = level.mapname;
|
||||
str = level.MapName;
|
||||
str.ToUpper();
|
||||
RealignString();
|
||||
}
|
||||
|
|
|
@ -131,7 +131,7 @@ void ST_FormatMapName(FString &mapname, const char *mapnamecolor)
|
|||
|
||||
if (am_showmaplabel == 1 || (am_showmaplabel == 2 && !ishub))
|
||||
{
|
||||
mapname << level.mapname << ": ";
|
||||
mapname << level.MapName << ": ";
|
||||
}
|
||||
mapname << mapnamecolor << level.LevelName;
|
||||
}
|
||||
|
@ -1090,12 +1090,12 @@ void DBaseStatusBar::RefreshBackground () const
|
|||
|
||||
if (setblocks >= 10)
|
||||
{
|
||||
const gameborder_t *border = gameinfo.border;
|
||||
FTexture *p;
|
||||
|
||||
p = TexMan[border->b];
|
||||
screen->FlatFill(0, y, x, y + p->GetHeight(), p, true);
|
||||
screen->FlatFill(x2, y, SCREENWIDTH, y + p->GetHeight(), p, true);
|
||||
FTexture *p = TexMan[gameinfo.Border.b];
|
||||
if (p != NULL)
|
||||
{
|
||||
screen->FlatFill(0, y, x, y + p->GetHeight(), p, true);
|
||||
screen->FlatFill(x2, y, SCREENWIDTH, y + p->GetHeight(), p, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
50
src/gi.cpp
50
src/gi.cpp
|
@ -51,7 +51,7 @@ const char *GameNames[17] =
|
|||
};
|
||||
|
||||
|
||||
static gameborder_t DoomBorder =
|
||||
static staticgameborder_t DoomBorder =
|
||||
{
|
||||
8, 8,
|
||||
"brdr_tl", "brdr_t", "brdr_tr",
|
||||
|
@ -59,7 +59,7 @@ static gameborder_t DoomBorder =
|
|||
"brdr_bl", "brdr_b", "brdr_br"
|
||||
};
|
||||
|
||||
static gameborder_t HereticBorder =
|
||||
static staticgameborder_t HereticBorder =
|
||||
{
|
||||
4, 16,
|
||||
"bordtl", "bordt", "bordtr",
|
||||
|
@ -67,7 +67,7 @@ static gameborder_t HereticBorder =
|
|||
"bordbl", "bordb", "bordbr"
|
||||
};
|
||||
|
||||
static gameborder_t StrifeBorder =
|
||||
static staticgameborder_t StrifeBorder =
|
||||
{
|
||||
8, 8,
|
||||
"brdr_tl", "brdr_t", "brdr_tr",
|
||||
|
@ -231,56 +231,51 @@ void FMapInfoParser::ParseGameInfo()
|
|||
}
|
||||
else if(nextKey.CompareNoCase("border") == 0)
|
||||
{
|
||||
if(sc.CheckToken(TK_Identifier))
|
||||
staticgameborder_t *b;
|
||||
if (sc.CheckToken(TK_Identifier))
|
||||
{
|
||||
switch(sc.MustMatchString(GameInfoBorders))
|
||||
{
|
||||
default:
|
||||
gameinfo.border = &DoomBorder;
|
||||
b = &DoomBorder;
|
||||
break;
|
||||
case 1:
|
||||
gameinfo.border = &HereticBorder;
|
||||
b = &HereticBorder;
|
||||
break;
|
||||
case 2:
|
||||
gameinfo.border = &StrifeBorder;
|
||||
b = &StrifeBorder;
|
||||
break;
|
||||
}
|
||||
gameinfo.Border = *b;
|
||||
}
|
||||
else
|
||||
{
|
||||
// border = {size, offset, tr, t, tl, r, l ,br, b, bl};
|
||||
char *graphics[8] = {DoomBorder.tr, DoomBorder.t, DoomBorder.tl, DoomBorder.r, DoomBorder.l, DoomBorder.br, DoomBorder.b, DoomBorder.bl};
|
||||
FString *graphics[8] = { &gameinfo.Border.tr, &gameinfo.Border.t, &gameinfo.Border.tl, &gameinfo.Border.r, &gameinfo.Border.l, &gameinfo.Border.br, &gameinfo.Border.b, &gameinfo.Border.bl };
|
||||
sc.MustGetToken(TK_IntConst);
|
||||
DoomBorder.offset = sc.Number;
|
||||
gameinfo.Border.offset = sc.Number;
|
||||
sc.MustGetToken(',');
|
||||
sc.MustGetToken(TK_IntConst);
|
||||
DoomBorder.size = sc.Number;
|
||||
gameinfo.Border.size = sc.Number;
|
||||
for(int i = 0;i < 8;i++)
|
||||
{
|
||||
sc.MustGetToken(',');
|
||||
sc.MustGetToken(TK_StringConst);
|
||||
int len = int(strlen(sc.String));
|
||||
if(len > 8)
|
||||
sc.ScriptError("Border graphic can not be more than 8 characters long.\n");
|
||||
memcpy(graphics[i], sc.String, len);
|
||||
if(len < 8) // end with a null byte if the string is less than 8 chars.
|
||||
graphics[i][len] = 0;
|
||||
(*graphics[i]) = sc.String;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(nextKey.CompareNoCase("armoricons") == 0)
|
||||
{
|
||||
sc.MustGetToken(TK_StringConst);
|
||||
strncpy(gameinfo.ArmorIcon1, sc.String, 8);
|
||||
gameinfo.ArmorIcon1[8] = 0;
|
||||
gameinfo.ArmorIcon1 = sc.String;
|
||||
if (sc.CheckToken(','))
|
||||
{
|
||||
sc.MustGetToken(TK_FloatConst);
|
||||
gameinfo.Armor2Percent = FLOAT2FIXED(sc.Float);
|
||||
sc.MustGetToken(',');
|
||||
sc.MustGetToken(TK_StringConst);
|
||||
strncpy(gameinfo.ArmorIcon2, sc.String, 8);
|
||||
gameinfo.ArmorIcon2[8] = 0;
|
||||
gameinfo.ArmorIcon2 = sc.String;
|
||||
}
|
||||
}
|
||||
else if(nextKey.CompareNoCase("maparrow") == 0)
|
||||
|
@ -295,7 +290,7 @@ void FMapInfoParser::ParseGameInfo()
|
|||
else gameinfo.mCheatMapArrow = "";
|
||||
}
|
||||
// Insert valid keys here.
|
||||
GAMEINFOKEY_CSTRING(titlePage, "titlePage", 8)
|
||||
GAMEINFOKEY_STRING(TitlePage, "titlePage")
|
||||
GAMEINFOKEY_STRINGARRAY(creditPages, "addcreditPage", 8, false)
|
||||
GAMEINFOKEY_STRINGARRAY(creditPages, "CreditPage", 8, true)
|
||||
GAMEINFOKEY_STRINGARRAY(PlayerClasses, "addplayerclasses", 0, false)
|
||||
|
@ -306,17 +301,17 @@ void FMapInfoParser::ParseGameInfo()
|
|||
GAMEINFOKEY_FLOAT(pageTime, "pageTime")
|
||||
GAMEINFOKEY_STRING(chatSound, "chatSound")
|
||||
GAMEINFOKEY_MUSIC(finaleMusic, finaleOrder, "finaleMusic")
|
||||
GAMEINFOKEY_CSTRING(finaleFlat, "finaleFlat", 8)
|
||||
GAMEINFOKEY_STRING(FinaleFlat, "finaleFlat")
|
||||
GAMEINFOKEY_STRINGARRAY(finalePages, "finalePage", 8, true)
|
||||
GAMEINFOKEY_STRINGARRAY(infoPages, "addinfoPage", 8, false)
|
||||
GAMEINFOKEY_STRINGARRAY(infoPages, "infoPage", 8, true)
|
||||
GAMEINFOKEY_CSTRING(PauseSign, "pausesign", 8)
|
||||
GAMEINFOKEY_STRING(PauseSign, "pausesign")
|
||||
GAMEINFOKEY_STRING(quitSound, "quitSound")
|
||||
GAMEINFOKEY_CSTRING(borderFlat, "borderFlat", 8)
|
||||
GAMEINFOKEY_STRING(BorderFlat, "borderFlat")
|
||||
GAMEINFOKEY_FIXED(telefogheight, "telefogheight")
|
||||
GAMEINFOKEY_FIXED(gibfactor, "gibfactor")
|
||||
GAMEINFOKEY_INT(defKickback, "defKickback")
|
||||
GAMEINFOKEY_CSTRING(SkyFlatName, "SkyFlatName", 8)
|
||||
GAMEINFOKEY_STRING(SkyFlatName, "SkyFlatName")
|
||||
GAMEINFOKEY_STRING(translator, "translator")
|
||||
GAMEINFOKEY_COLOR(pickupcolor, "pickupcolor")
|
||||
GAMEINFOKEY_COLOR(defaultbloodcolor, "defaultbloodcolor")
|
||||
|
@ -328,6 +323,7 @@ void FMapInfoParser::ParseGameInfo()
|
|||
GAMEINFOKEY_BOOL(noloopfinalemusic, "noloopfinalemusic")
|
||||
GAMEINFOKEY_BOOL(drawreadthis, "drawreadthis")
|
||||
GAMEINFOKEY_BOOL(swapmenu, "swapmenu")
|
||||
GAMEINFOKEY_BOOL(dontcrunchcorpses, "dontcrunchcorpses")
|
||||
GAMEINFOKEY_BOOL(intermissioncounter, "intermissioncounter")
|
||||
GAMEINFOKEY_BOOL(nightmarefast, "nightmarefast")
|
||||
GAMEINFOKEY_COLOR(dimcolor, "dimcolor")
|
||||
|
@ -336,7 +332,7 @@ void FMapInfoParser::ParseGameInfo()
|
|||
GAMEINFOKEY_INT(defaultrespawntime, "defaultrespawntime")
|
||||
GAMEINFOKEY_INT(defaultrespawntime, "defaultrespawntime")
|
||||
GAMEINFOKEY_INT(defaultdropstyle, "defaultdropstyle")
|
||||
GAMEINFOKEY_CSTRING(Endoom, "endoom", 8)
|
||||
GAMEINFOKEY_STRING(Endoom, "endoom")
|
||||
GAMEINFOKEY_INT(player5start, "player5start")
|
||||
GAMEINFOKEY_STRINGARRAY(quitmessages, "addquitmessages", 0, false)
|
||||
GAMEINFOKEY_STRINGARRAY(quitmessages, "quitmessages", 0, true)
|
||||
|
@ -347,7 +343,7 @@ void FMapInfoParser::ParseGameInfo()
|
|||
GAMEINFOKEY_STRING(mFontColorHeader, "menufontcolor_header")
|
||||
GAMEINFOKEY_STRING(mFontColorHighlight, "menufontcolor_highlight")
|
||||
GAMEINFOKEY_STRING(mFontColorSelection, "menufontcolor_selection")
|
||||
GAMEINFOKEY_CSTRING(mBackButton, "menubackbutton", 8)
|
||||
GAMEINFOKEY_STRING(mBackButton, "menubackbutton")
|
||||
GAMEINFOKEY_INT(TextScreenX, "textscreenx")
|
||||
GAMEINFOKEY_INT(TextScreenY, "textscreeny")
|
||||
GAMEINFOKEY_STRING(DefaultEndSequence, "defaultendsequence")
|
||||
|
|
52
src/gi.h
52
src/gi.h
|
@ -52,7 +52,7 @@
|
|||
|
||||
extern const char *GameNames[17];
|
||||
|
||||
struct gameborder_t
|
||||
struct staticgameborder_t
|
||||
{
|
||||
BYTE offset;
|
||||
BYTE size;
|
||||
|
@ -66,6 +66,35 @@ struct gameborder_t
|
|||
char br[8];
|
||||
};
|
||||
|
||||
struct gameborder_t
|
||||
{
|
||||
BYTE offset;
|
||||
BYTE size;
|
||||
FString tl;
|
||||
FString t;
|
||||
FString tr;
|
||||
FString l;
|
||||
FString r;
|
||||
FString bl;
|
||||
FString b;
|
||||
FString br;
|
||||
|
||||
gameborder_t &operator=(staticgameborder_t &other)
|
||||
{
|
||||
offset = other.offset;
|
||||
size = other.size;
|
||||
tl = other.tl;
|
||||
t = other.t;
|
||||
tr = other.tr;
|
||||
l = other.l;
|
||||
r = other.r;
|
||||
bl = other.bl;
|
||||
b = other.b;
|
||||
br = other.br;
|
||||
return *this;
|
||||
}
|
||||
};
|
||||
|
||||
struct FGIFont
|
||||
{
|
||||
FName fontname;
|
||||
|
@ -78,12 +107,13 @@ struct gameinfo_t
|
|||
EGameType gametype;
|
||||
FString ConfigName;
|
||||
|
||||
char titlePage[9];
|
||||
FString TitlePage;
|
||||
bool drawreadthis;
|
||||
bool noloopfinalemusic;
|
||||
bool intermissioncounter;
|
||||
bool nightmarefast;
|
||||
bool swapmenu;
|
||||
bool dontcrunchcorpses;
|
||||
TArray<FName> creditPages;
|
||||
TArray<FName> finalePages;
|
||||
TArray<FName> infoPages;
|
||||
|
@ -98,16 +128,16 @@ struct gameinfo_t
|
|||
FString chatSound;
|
||||
FString finaleMusic;
|
||||
int finaleOrder;
|
||||
char finaleFlat[9];
|
||||
char borderFlat[9];
|
||||
char SkyFlatName[9];
|
||||
char ArmorIcon1[9];
|
||||
char ArmorIcon2[9];
|
||||
char PauseSign[9];
|
||||
char Endoom[9];
|
||||
FString FinaleFlat;
|
||||
FString BorderFlat;
|
||||
FString SkyFlatName;
|
||||
FString ArmorIcon1;
|
||||
FString ArmorIcon2;
|
||||
FString PauseSign;
|
||||
FString Endoom;
|
||||
fixed_t Armor2Percent;
|
||||
FString quitSound;
|
||||
gameborder_t *border;
|
||||
gameborder_t Border;
|
||||
int telefogheight;
|
||||
int defKickback;
|
||||
FString translator;
|
||||
|
@ -133,7 +163,7 @@ struct gameinfo_t
|
|||
FName mFontColorHeader;
|
||||
FName mFontColorHighlight;
|
||||
FName mFontColorSelection;
|
||||
char mBackButton[9];
|
||||
FString mBackButton;
|
||||
fixed_t gibfactor;
|
||||
int TextScreenX;
|
||||
int TextScreenY;
|
||||
|
|
|
@ -104,7 +104,7 @@ void DIntermissionScreen::Init(FIntermissionAction *desc, bool first)
|
|||
}
|
||||
else
|
||||
{
|
||||
texname = gameinfo.titlePage;
|
||||
texname = gameinfo.TitlePage.GetChars();
|
||||
}
|
||||
}
|
||||
else if (*texname == '$')
|
||||
|
|
|
@ -30,6 +30,7 @@ xx(Cumulative)
|
|||
xx(Fuzzy)
|
||||
xx(Opaque)
|
||||
xx(Stencil)
|
||||
xx(AddStencil)
|
||||
|
||||
// Render styles
|
||||
xx(Normal)
|
||||
|
@ -37,6 +38,7 @@ xx(SoulTrans)
|
|||
xx(OptFuzzy)
|
||||
xx(Add)
|
||||
xx(Shaded)
|
||||
xx(AddShaded)
|
||||
xx(TranslucentStencil)
|
||||
xx(Shadow)
|
||||
xx(Subtract)
|
||||
|
@ -486,6 +488,15 @@ xx(blockhitscan)
|
|||
|
||||
xx(Renderstyle)
|
||||
|
||||
xx(ceilingplane_a)
|
||||
xx(ceilingplane_b)
|
||||
xx(ceilingplane_c)
|
||||
xx(ceilingplane_d)
|
||||
xx(floorplane_a)
|
||||
xx(floorplane_b)
|
||||
xx(floorplane_c)
|
||||
xx(floorplane_d)
|
||||
|
||||
// USDF keywords
|
||||
xx(Amount)
|
||||
xx(Text)
|
||||
|
|
|
@ -347,7 +347,7 @@ inline int FNodeBuilder::ClassifyLine (node_t &node, const FPrivVert *v1, const
|
|||
#ifdef DISABLE_SSE
|
||||
return ClassifyLine2 (node, v1, v2, sidev);
|
||||
#else
|
||||
#if defined(__SSE2__) || defined(_M_IX64)
|
||||
#if defined(__SSE2__) || defined(_M_X64)
|
||||
// If compiling with SSE2 support everywhere, just use the SSE2 version.
|
||||
return ClassifyLineSSE2 (node, v1, v2, sidev);
|
||||
#elif defined(_MSC_VER) && _MSC_VER < 1300
|
||||
|
|
|
@ -3542,6 +3542,8 @@ static const int LegacyRenderStyleIndices[] =
|
|||
3, // STYLE_SoulTrans,
|
||||
4, // STYLE_OptFuzzy,
|
||||
5, // STYLE_Stencil,
|
||||
6, // STYLE_AddStencil
|
||||
7, // STYLE_AddShaded
|
||||
64, // STYLE_Translucent
|
||||
65, // STYLE_Add,
|
||||
66, // STYLE_Shaded,
|
||||
|
@ -6979,7 +6981,7 @@ scriptwait:
|
|||
break;
|
||||
|
||||
case PRINTNAME_LEVEL:
|
||||
work += level.mapname;
|
||||
work += level.MapName;
|
||||
break;
|
||||
|
||||
case PRINTNAME_SKILL:
|
||||
|
@ -8940,7 +8942,7 @@ static void addDefered (level_info_t *i, acsdefered_t::EType type, int script, c
|
|||
def->playernum = -1;
|
||||
}
|
||||
i->defered = def;
|
||||
DPrintf ("%s on map %s deferred\n", ScriptPresentation(script).GetChars(), i->mapname);
|
||||
DPrintf ("%s on map %s deferred\n", ScriptPresentation(script).GetChars(), i->MapName.GetChars());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -8948,7 +8950,7 @@ EXTERN_CVAR (Bool, sv_cheats)
|
|||
|
||||
int P_StartScript (AActor *who, line_t *where, int script, const char *map, const int *args, int argcount, int flags)
|
||||
{
|
||||
if (map == NULL || 0 == strnicmp (level.mapname, map, 8))
|
||||
if (map == NULL || 0 == strnicmp (level.MapName, map, 8))
|
||||
{
|
||||
FBehavior *module = NULL;
|
||||
const ScriptPtr *scriptdata;
|
||||
|
@ -9001,17 +9003,17 @@ int P_StartScript (AActor *who, line_t *where, int script, const char *map, cons
|
|||
return false;
|
||||
}
|
||||
|
||||
void P_SuspendScript (int script, char *map)
|
||||
void P_SuspendScript (int script, const char *map)
|
||||
{
|
||||
if (strnicmp (level.mapname, map, 8))
|
||||
if (strnicmp (level.MapName, map, 8))
|
||||
addDefered (FindLevelInfo (map), acsdefered_t::defsuspend, script, NULL, 0, NULL);
|
||||
else
|
||||
SetScriptState (script, DLevelScript::SCRIPT_Suspended);
|
||||
}
|
||||
|
||||
void P_TerminateScript (int script, char *map)
|
||||
void P_TerminateScript (int script, const char *map)
|
||||
{
|
||||
if (strnicmp (level.mapname, map, 8))
|
||||
if (strnicmp (level.MapName, map, 8))
|
||||
addDefered (FindLevelInfo (map), acsdefered_t::defterminate, script, NULL, 0, NULL);
|
||||
else
|
||||
SetScriptState (script, DLevelScript::SCRIPT_PleaseRemove);
|
||||
|
|
|
@ -863,7 +863,7 @@ FUNC(LS_Teleport_NewMap)
|
|||
|
||||
if (info && CheckIfExitIsGood (it, info))
|
||||
{
|
||||
G_ChangeLevel(info->mapname, arg1, arg2 ? CHANGELEVEL_KEEPFACING : 0);
|
||||
G_ChangeLevel(info->MapName, arg1, arg2 ? CHANGELEVEL_KEEPFACING : 0);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -1644,11 +1644,11 @@ FUNC(LS_ACS_Execute)
|
|||
|
||||
if (arg1 == 0)
|
||||
{
|
||||
mapname = level.mapname;
|
||||
mapname = level.MapName;
|
||||
}
|
||||
else if ((info = FindLevelByNum(arg1)) != NULL)
|
||||
{
|
||||
mapname = info->mapname;
|
||||
mapname = info->MapName;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1667,11 +1667,11 @@ FUNC(LS_ACS_ExecuteAlways)
|
|||
|
||||
if (arg1 == 0)
|
||||
{
|
||||
mapname = level.mapname;
|
||||
mapname = level.MapName;
|
||||
}
|
||||
else if ((info = FindLevelByNum(arg1)) != NULL)
|
||||
{
|
||||
mapname = info->mapname;
|
||||
mapname = info->MapName;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1707,7 +1707,7 @@ FUNC(LS_ACS_ExecuteWithResult)
|
|||
int args[4] = { arg1, arg2, arg3, arg4 };
|
||||
int flags = (backSide ? ACS_BACKSIDE : 0) | ACS_ALWAYS | ACS_WANTRESULT;
|
||||
|
||||
return P_StartScript (it, ln, arg0, level.mapname, args, 4, flags);
|
||||
return P_StartScript (it, ln, arg0, level.MapName, args, 4, flags);
|
||||
}
|
||||
|
||||
FUNC(LS_ACS_Suspend)
|
||||
|
@ -1716,9 +1716,9 @@ FUNC(LS_ACS_Suspend)
|
|||
level_info_t *info;
|
||||
|
||||
if (arg1 == 0)
|
||||
P_SuspendScript (arg0, level.mapname);
|
||||
P_SuspendScript (arg0, level.MapName);
|
||||
else if ((info = FindLevelByNum (arg1)) )
|
||||
P_SuspendScript (arg0, info->mapname);
|
||||
P_SuspendScript (arg0, info->MapName);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -1729,9 +1729,9 @@ FUNC(LS_ACS_Terminate)
|
|||
level_info_t *info;
|
||||
|
||||
if (arg1 == 0)
|
||||
P_TerminateScript (arg0, level.mapname);
|
||||
P_TerminateScript (arg0, level.MapName);
|
||||
else if ((info = FindLevelByNum (arg1)) )
|
||||
P_TerminateScript (arg0, info->mapname);
|
||||
P_TerminateScript (arg0, info->MapName);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -1010,6 +1010,16 @@ bool AActor::Grind(bool items)
|
|||
if ((flags & MF_CORPSE) && !(flags3 & MF3_DONTGIB) && (health <= 0))
|
||||
{
|
||||
FState * state = FindState(NAME_Crush);
|
||||
|
||||
// In Heretic and Chex Quest we don't change the actor's sprite, just its size.
|
||||
if (state == NULL && gameinfo.dontcrunchcorpses)
|
||||
{
|
||||
flags &= ~MF_SOLID;
|
||||
flags3 |= MF3_DONTGIB;
|
||||
height = radius = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool isgeneric = false;
|
||||
// ZDoom behavior differs from standard as crushed corpses cannot be raised.
|
||||
// The reason for the change was originally because of a problem with players,
|
||||
|
|
|
@ -272,11 +272,12 @@ MapData *P_OpenMapData(const char * mapname, bool justcheck)
|
|||
FString fmt;
|
||||
int lump_wad;
|
||||
int lump_map;
|
||||
int lump_name;
|
||||
int lump_name = -1;
|
||||
|
||||
// Check for both *.wad and *.map in order to load Build maps
|
||||
// as well. The higher one will take precedence.
|
||||
lump_name = Wads.CheckNumForName(mapname);
|
||||
// Names with more than 8 characters will only be checked as .wad and .map.
|
||||
if (strlen(mapname) <= 8) lump_name = Wads.CheckNumForName(mapname);
|
||||
fmt.Format("maps/%s.wad", mapname);
|
||||
lump_wad = Wads.CheckNumForFullName(fmt);
|
||||
fmt.Format("maps/%s.map", mapname);
|
||||
|
@ -3559,7 +3560,7 @@ void P_FreeExtraLevelData()
|
|||
//
|
||||
|
||||
// [RH] position indicates the start spot to spawn at
|
||||
void P_SetupLevel (char *lumpname, int position)
|
||||
void P_SetupLevel (const char *lumpname, int position)
|
||||
{
|
||||
cycle_t times[20];
|
||||
FMapThing *buildthings;
|
||||
|
|
|
@ -103,7 +103,7 @@ bool P_CheckMapData(const char * mapname);
|
|||
// [RH] The only parameter used is mapname, so I removed playermask and skill.
|
||||
// On September 1, 1998, I added the position to indicate which set
|
||||
// of single-player start spots should be spawned in the level.
|
||||
void P_SetupLevel (char *mapname, int position);
|
||||
void P_SetupLevel (const char *mapname, int position);
|
||||
|
||||
void P_FreeLevelData();
|
||||
void P_FreeExtraLevelData();
|
||||
|
|
|
@ -902,8 +902,8 @@ bool EV_TeleportSector (int tag, int source_tid, int dest_tid, bool fog, int gro
|
|||
#define ACS_NET 8
|
||||
|
||||
int P_StartScript (AActor *who, line_t *where, int script, const char *map, const int *args, int argcount, int flags);
|
||||
void P_SuspendScript (int script, char *map);
|
||||
void P_TerminateScript (int script, char *map);
|
||||
void P_SuspendScript (int script, const char *map);
|
||||
void P_TerminateScript (int script, const char *map);
|
||||
void P_DoDeferedScripts (void);
|
||||
|
||||
//
|
||||
|
|
|
@ -658,6 +658,9 @@ public:
|
|||
case NAME_Stencil:
|
||||
th->RenderStyle = STYLE_Stencil;
|
||||
break;
|
||||
case NAME_AddStencil:
|
||||
th->RenderStyle = STYLE_AddStencil;
|
||||
break;
|
||||
case NAME_Translucent:
|
||||
th->RenderStyle = STYLE_Translucent;
|
||||
break;
|
||||
|
@ -668,6 +671,9 @@ public:
|
|||
case NAME_Shaded:
|
||||
th->RenderStyle = STYLE_Shaded;
|
||||
break;
|
||||
case NAME_AddShaded:
|
||||
th->RenderStyle = STYLE_AddShaded;
|
||||
break;
|
||||
case NAME_TranslucentStencil:
|
||||
th->RenderStyle = STYLE_TranslucentStencil;
|
||||
break;
|
||||
|
@ -1239,6 +1245,7 @@ public:
|
|||
int lightcolor = -1;
|
||||
int fadecolor = -1;
|
||||
int desaturation = -1;
|
||||
int fplaneflags = 0, cplaneflags = 0;
|
||||
|
||||
memset(sec, 0, sizeof(*sec));
|
||||
sec->lightlevel = 160;
|
||||
|
@ -1440,6 +1447,48 @@ public:
|
|||
Flag(sec->MoreFlags, SECF_UNDERWATER, key);
|
||||
break;
|
||||
|
||||
case NAME_floorplane_a:
|
||||
fplaneflags |= 1;
|
||||
sec->floorplane.a = CheckFixed(key);
|
||||
break;
|
||||
|
||||
case NAME_floorplane_b:
|
||||
fplaneflags |= 2;
|
||||
sec->floorplane.b = CheckFixed(key);
|
||||
break;
|
||||
|
||||
case NAME_floorplane_c:
|
||||
fplaneflags |= 4;
|
||||
sec->floorplane.c = CheckFixed(key);
|
||||
sec->floorplane.ic = FixedDiv(FRACUNIT, sec->floorplane.c);
|
||||
break;
|
||||
|
||||
case NAME_floorplane_d:
|
||||
fplaneflags |= 8;
|
||||
sec->floorplane.d = CheckFixed(key);
|
||||
break;
|
||||
|
||||
case NAME_ceilingplane_a:
|
||||
cplaneflags |= 1;
|
||||
sec->ceilingplane.a = CheckFixed(key);
|
||||
break;
|
||||
|
||||
case NAME_ceilingplane_b:
|
||||
cplaneflags |= 2;
|
||||
sec->ceilingplane.b = CheckFixed(key);
|
||||
break;
|
||||
|
||||
case NAME_ceilingplane_c:
|
||||
cplaneflags |= 4;
|
||||
sec->ceilingplane.c = CheckFixed(key);
|
||||
sec->ceilingplane.ic = FixedDiv(FRACUNIT, sec->ceilingplane.c);
|
||||
break;
|
||||
|
||||
case NAME_ceilingplane_d:
|
||||
cplaneflags |= 8;
|
||||
sec->ceilingplane.d = CheckFixed(key);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -1451,12 +1500,22 @@ public:
|
|||
}
|
||||
|
||||
sec->secretsector = !!(sec->special&SECRET_MASK);
|
||||
sec->floorplane.d = -sec->GetPlaneTexZ(sector_t::floor);
|
||||
sec->floorplane.c = FRACUNIT;
|
||||
sec->floorplane.ic = FRACUNIT;
|
||||
sec->ceilingplane.d = sec->GetPlaneTexZ(sector_t::ceiling);
|
||||
sec->ceilingplane.c = -FRACUNIT;
|
||||
sec->ceilingplane.ic = -FRACUNIT;
|
||||
|
||||
// Reset the planes to their defaults if not all of the plane equation's parameters were found.
|
||||
if (fplaneflags != 15)
|
||||
{
|
||||
sec->floorplane.a = sec->floorplane.b = 0;
|
||||
sec->floorplane.d = -sec->GetPlaneTexZ(sector_t::floor);
|
||||
sec->floorplane.c = FRACUNIT;
|
||||
sec->floorplane.ic = FRACUNIT;
|
||||
}
|
||||
if (cplaneflags != 15)
|
||||
{
|
||||
sec->ceilingplane.a = sec->ceilingplane.b = 0;
|
||||
sec->ceilingplane.d = sec->GetPlaneTexZ(sector_t::ceiling);
|
||||
sec->ceilingplane.c = -FRACUNIT;
|
||||
sec->ceilingplane.ic = -FRACUNIT;
|
||||
}
|
||||
|
||||
if (lightcolor == -1 && fadecolor == -1 && desaturation == -1)
|
||||
{
|
||||
|
|
|
@ -47,18 +47,20 @@ CVAR (Int, r_drawfuzz, 1, CVAR_ARCHIVE)
|
|||
#ifndef __APPLE__
|
||||
FRenderStyle LegacyRenderStyles[STYLE_Count] =
|
||||
{
|
||||
/* STYLE_None */ {{ STYLEOP_None, STYLEALPHA_Zero, STYLEALPHA_Zero, 0 }},
|
||||
/* STYLE_Normal */ {{ STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_InvSrc, STYLEF_Alpha1 }},
|
||||
/* STYLE_Fuzzy */ {{ STYLEOP_Fuzz, STYLEALPHA_Src, STYLEALPHA_InvSrc, 0 }},
|
||||
/* STYLE_SoulTrans */ {{ STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_InvSrc, STYLEF_TransSoulsAlpha }},
|
||||
/* STYLE_OptFuzzy */ {{ STYLEOP_FuzzOrAdd, STYLEALPHA_Src, STYLEALPHA_InvSrc, 0 }},
|
||||
/* STYLE_Stencil */ {{ STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_InvSrc, STYLEF_Alpha1 | STYLEF_ColorIsFixed }},
|
||||
/* STYLE_Translucent */ {{ STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_InvSrc, 0 }},
|
||||
/* STYLE_Add */ {{ STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_One, 0 }},
|
||||
/* STYLE_Shaded */ {{ STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_InvSrc, STYLEF_RedIsAlpha | STYLEF_ColorIsFixed }},
|
||||
/* STYLE_TranslucentStencil */{{ STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_InvSrc, STYLEF_ColorIsFixed }},
|
||||
/* STYLE_Shadow */ {{ STYLEOP_Shadow, 0, 0, 0 }},
|
||||
/* STYLE_Subtract*/ {{ STYLEOP_RevSub, STYLEALPHA_Src, STYLEALPHA_One, 0 }},
|
||||
{ { STYLEOP_None, STYLEALPHA_Zero, STYLEALPHA_Zero, 0 } }, /* STYLE_None */
|
||||
{ { STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_InvSrc, STYLEF_Alpha1 } }, /* STYLE_Normal */
|
||||
{ { STYLEOP_Fuzz, STYLEALPHA_Src, STYLEALPHA_InvSrc, 0 } }, /* STYLE_Fuzzy */
|
||||
{ { STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_InvSrc, STYLEF_TransSoulsAlpha } }, /* STYLE_SoulTrans */
|
||||
{ { STYLEOP_FuzzOrAdd, STYLEALPHA_Src, STYLEALPHA_InvSrc, 0 } }, /* STYLE_OptFuzzy */
|
||||
{ { STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_InvSrc, STYLEF_Alpha1 | STYLEF_ColorIsFixed } }, /* STYLE_Stencil */
|
||||
{ { STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_InvSrc, 0 } }, /* STYLE_Translucent */
|
||||
{ { STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_One, 0 } }, /* STYLE_Add */
|
||||
{ { STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_InvSrc, STYLEF_RedIsAlpha | STYLEF_ColorIsFixed } }, /* STYLE_Shaded */
|
||||
{ { STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_InvSrc, STYLEF_ColorIsFixed } }, /* STYLE_TranslucentStencil */
|
||||
{ { STYLEOP_Shadow, 0, 0, 0 } }, /* STYLE_Shadow */
|
||||
{ { STYLEOP_RevSub, STYLEALPHA_Src, STYLEALPHA_One, 0 } }, /* STYLE_Subtract*/
|
||||
{ { STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_One, STYLEF_ColorIsFixed } }, /* STYLE_AddStencil */
|
||||
{ { STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_One, STYLEF_RedIsAlpha | STYLEF_ColorIsFixed } }, /* STYLE_AddShaded */
|
||||
};
|
||||
#else
|
||||
FRenderStyle LegacyRenderStyles[STYLE_Count];
|
||||
|
@ -77,6 +79,8 @@ static const BYTE Styles[STYLE_Count * 4] =
|
|||
STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_InvSrc, STYLEF_ColorIsFixed,
|
||||
STYLEOP_Shadow, 0, 0, 0,
|
||||
STYLEOP_RevSub, STYLEALPHA_Src, STYLEALPHA_One, 0,
|
||||
STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_One, STYLEF_Alpha1 | STYLEF_ColorIsFixed,
|
||||
STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_One, STYLEF_RedIsAlpha | STYLEF_ColorIsFixed,
|
||||
};
|
||||
|
||||
static struct LegacyInit
|
||||
|
|
|
@ -50,6 +50,8 @@ enum ERenderStyle
|
|||
STYLE_TranslucentStencil,
|
||||
STYLE_Shadow,
|
||||
STYLE_Subtract, // Actually this is 'reverse subtract' but this is what normal people would expect by 'subtract'.
|
||||
STYLE_AddStencil, // Fill image interior with alphacolor
|
||||
STYLE_AddShaded, // Treat patch data as alpha values for alphacolor
|
||||
|
||||
STYLE_Count
|
||||
};
|
||||
|
|
|
@ -229,9 +229,10 @@ public:
|
|||
void BeginPlay ();
|
||||
void Activate (AActor *source);
|
||||
void Deactivate (AActor *source);
|
||||
virtual bool TriggerAction (AActor *triggerer, int activationType);
|
||||
bool TriggerAction(AActor *triggerer, int activationType);
|
||||
protected:
|
||||
bool CheckTrigger (AActor *triggerer) const;
|
||||
virtual bool DoTriggerAction(AActor *triggerer, int activationType);
|
||||
bool CheckTrigger(AActor *triggerer) const;
|
||||
};
|
||||
|
||||
class ASkyViewpoint;
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
#include "files.h"
|
||||
|
||||
class FResourceFile;
|
||||
class FTexture;
|
||||
|
||||
struct FResourceLump
|
||||
{
|
||||
|
@ -24,6 +25,7 @@ struct FResourceLump
|
|||
SBYTE RefCount;
|
||||
char * Cache;
|
||||
FResourceFile * Owner;
|
||||
FTexture * LinkedTexture;
|
||||
int Namespace;
|
||||
|
||||
FResourceLump()
|
||||
|
@ -35,6 +37,7 @@ struct FResourceLump
|
|||
RefCount = 0;
|
||||
Namespace = 0; // ns_global
|
||||
*Name = 0;
|
||||
LinkedTexture = NULL;
|
||||
}
|
||||
|
||||
virtual ~FResourceLump();
|
||||
|
|
|
@ -172,11 +172,7 @@ static int DoomSpecificInfo (char *buffer, char *end)
|
|||
}
|
||||
else
|
||||
{
|
||||
char name[9];
|
||||
|
||||
strncpy (name, level.mapname, 8);
|
||||
name[8] = 0;
|
||||
p += snprintf (buffer+p, size-p, "\n\nCurrent map: %s", name);
|
||||
p += snprintf (buffer+p, size-p, "\n\nCurrent map: %s", level.MapName.GetChars());
|
||||
|
||||
if (!viewactive)
|
||||
{
|
||||
|
|
|
@ -484,7 +484,7 @@ static bool Cht_ChangeStartSpot (cheatseq_t *cheat)
|
|||
{
|
||||
char cmd[64];
|
||||
|
||||
mysnprintf (cmd, countof(cmd), "changemap %s %c", level.mapname, cheat->Args[0]);
|
||||
mysnprintf (cmd, countof(cmd), "changemap %s %c", level.MapName.GetChars(), cheat->Args[0]);
|
||||
C_DoCommand (cmd);
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -408,12 +408,13 @@ static void StoreLevelStats()
|
|||
{
|
||||
for(i=0;i<LevelData.Size();i++)
|
||||
{
|
||||
if (!stricmp(LevelData[i].levelname, level.mapname)) break;
|
||||
if (!stricmp(LevelData[i].levelname, level.MapName)) break;
|
||||
}
|
||||
if (i==LevelData.Size())
|
||||
{
|
||||
LevelData.Reserve(1);
|
||||
strcpy(LevelData[i].levelname, level.mapname);
|
||||
strncpy(LevelData[i].levelname, level.MapName, 8);
|
||||
LevelData[i].levelname[8] = 0;
|
||||
}
|
||||
LevelData[i].totalkills = level.total_monsters;
|
||||
LevelData[i].killcount = level.killed_monsters;
|
||||
|
|
|
@ -551,7 +551,7 @@ void FTextureManager::ParseTime (FScanner &sc, DWORD &min, DWORD &max)
|
|||
|
||||
void FTextureManager::ParseWarp(FScanner &sc)
|
||||
{
|
||||
const BITFIELD texflags = TEXMAN_Overridable | TEXMAN_TryAny;
|
||||
const BITFIELD texflags = TEXMAN_Overridable | TEXMAN_TryAny | TEXMAN_ShortNameOnly;
|
||||
bool isflat = false;
|
||||
bool type2 = sc.Compare ("warp2"); // [GRB]
|
||||
sc.MustGetString ();
|
||||
|
@ -616,7 +616,7 @@ void FTextureManager::ParseWarp(FScanner &sc)
|
|||
|
||||
void FTextureManager::ParseCameraTexture(FScanner &sc)
|
||||
{
|
||||
const BITFIELD texflags = TEXMAN_Overridable | TEXMAN_TryAny;
|
||||
const BITFIELD texflags = TEXMAN_Overridable | TEXMAN_TryAny | TEXMAN_ShortNameOnly;
|
||||
int width, height;
|
||||
int fitwidth, fitheight;
|
||||
FString picname;
|
||||
|
|
|
@ -1001,21 +1001,7 @@ void FMultiPatchTexture::ParsePatch(FScanner &sc, TexPart & part, bool silent, i
|
|||
|
||||
if (!texno.isValid())
|
||||
{
|
||||
int lumpnum = Wads.CheckNumForFullName(sc.String);
|
||||
if (lumpnum >= 0)
|
||||
{
|
||||
texno = TexMan.FindTextureByLumpNum(lumpnum);
|
||||
if (texno.isValid ())
|
||||
{
|
||||
part.Texture = TexMan[texno];
|
||||
}
|
||||
else
|
||||
{
|
||||
part.Texture = FTexture::CreateTexture("", lumpnum, usetype);
|
||||
TexMan.AddTexture(part.Texture);
|
||||
}
|
||||
}
|
||||
else if (strlen(sc.String) <= 8 && !strpbrk(sc.String, "./"))
|
||||
if (strlen(sc.String) <= 8 && !strpbrk(sc.String, "./"))
|
||||
{
|
||||
int lumpnum = Wads.CheckNumForName(sc.String, usetype == TEX_MiscPatch? ns_graphics : ns_patches);
|
||||
if (lumpnum >= 0)
|
||||
|
|
|
@ -167,6 +167,8 @@ FTexture::FTexture (const char *name, int lumpnum)
|
|||
|
||||
FTexture::~FTexture ()
|
||||
{
|
||||
FTexture *link = Wads.GetLinkedTexture(SourceLump);
|
||||
if (link == this) Wads.SetLinkedTexture(SourceLump, NULL);
|
||||
KillNative();
|
||||
}
|
||||
|
||||
|
|
|
@ -220,8 +220,37 @@ FTextureID FTextureManager::CheckForTexture (const char *name, int usetype, BITF
|
|||
{
|
||||
if (firsttype == FTexture::TEX_Null) return FTextureID(0);
|
||||
if (firsttype == FTexture::TEX_FirstDefined && !(flags & TEXMAN_ReturnFirst)) return FTextureID(0);
|
||||
return FTextureID(firstfound);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!(flags & TEXMAN_ShortNameOnly))
|
||||
{
|
||||
// We intentionally only look for textures in subdirectories.
|
||||
// Any graphic being placed in the zip's root directory can not be found by this.
|
||||
if (strchr(name, '/'))
|
||||
{
|
||||
FTexture *const NO_TEXTURE = (FTexture*)-1;
|
||||
int lump = Wads.CheckNumForFullName(name);
|
||||
if (lump >= 0)
|
||||
{
|
||||
FTexture *tex = Wads.GetLinkedTexture(lump);
|
||||
if (tex == NO_TEXTURE) return FTextureID(-1);
|
||||
if (tex != NULL) return tex->id;
|
||||
tex = FTexture::CreateTexture("", lump, FTexture::TEX_Override);
|
||||
if (tex != NULL)
|
||||
{
|
||||
Wads.SetLinkedTexture(lump, tex);
|
||||
return AddTexture(tex);
|
||||
}
|
||||
else
|
||||
{
|
||||
// mark this lump as having no valid texture so that we don't have to retry creating one later.
|
||||
Wads.SetLinkedTexture(lump, NO_TEXTURE);
|
||||
}
|
||||
}
|
||||
}
|
||||
return FTextureID(firstfound);
|
||||
}
|
||||
|
||||
return FTextureID(-1);
|
||||
|
@ -273,30 +302,6 @@ int FTextureManager::ListTextures (const char *name, TArray<FTextureID> &list)
|
|||
return list.Size();
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// FTextureManager :: FindTextureByLumpNum
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
FTextureID FTextureManager::FindTextureByLumpNum (int lumpnum)
|
||||
{
|
||||
if (lumpnum < 0)
|
||||
{
|
||||
return FTextureID(-1);
|
||||
}
|
||||
// This can't use hashing because using ReplaceTexture would break the hash chains. :(
|
||||
for(unsigned i = 0; i <Textures.Size(); i++)
|
||||
{
|
||||
if (Textures[i].Texture->SourceLump == lumpnum)
|
||||
{
|
||||
return FTextureID(i);
|
||||
}
|
||||
}
|
||||
return FTextureID(-1);
|
||||
}
|
||||
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// FTextureManager :: GetTextures
|
||||
|
@ -1093,8 +1098,15 @@ void FTextureManager::WriteTexture (FArchive &arc, int picnum)
|
|||
pic = Textures[picnum].Texture;
|
||||
}
|
||||
|
||||
arc.WriteName (pic->Name);
|
||||
arc.WriteCount (pic->UseType);
|
||||
if (Wads.GetLinkedTexture(pic->SourceLump) == pic)
|
||||
{
|
||||
arc.WriteName(Wads.GetLumpFullName(pic->SourceLump));
|
||||
}
|
||||
else
|
||||
{
|
||||
arc.WriteName(pic->Name);
|
||||
}
|
||||
arc.WriteCount(pic->UseType);
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
|
|
|
@ -240,7 +240,6 @@ public:
|
|||
virtual int GetSourceLump() { return SourceLump; }
|
||||
virtual FTexture *GetRedirect(bool wantwarped);
|
||||
virtual FTexture *GetRawTexture(); // for FMultiPatchTexture to override
|
||||
FTextureID GetID() const { return id; }
|
||||
|
||||
virtual void Unload () = 0;
|
||||
|
||||
|
@ -433,12 +432,12 @@ public:
|
|||
TEXMAN_TryAny = 1,
|
||||
TEXMAN_Overridable = 2,
|
||||
TEXMAN_ReturnFirst = 4,
|
||||
TEXMAN_AllowSkins = 8
|
||||
TEXMAN_AllowSkins = 8,
|
||||
TEXMAN_ShortNameOnly = 16
|
||||
};
|
||||
|
||||
FTextureID CheckForTexture (const char *name, int usetype, BITFIELD flags=TEXMAN_TryAny);
|
||||
FTextureID GetTexture (const char *name, int usetype, BITFIELD flags=0);
|
||||
FTextureID FindTextureByLumpNum (int lumpnum);
|
||||
int ListTextures (const char *name, TArray<FTextureID> &list);
|
||||
|
||||
void AddTexturesLump (const void *lumpdata, int lumpsize, int deflumpnum, int patcheslump, int firstdup=0, bool texture1=false);
|
||||
|
|
|
@ -797,12 +797,12 @@ DEFINE_PROPERTY(renderstyle, S, Actor)
|
|||
PROP_STRING_PARM(str, 0);
|
||||
static const char * renderstyles[]={
|
||||
"NONE", "NORMAL", "FUZZY", "SOULTRANS", "OPTFUZZY", "STENCIL",
|
||||
"TRANSLUCENT", "ADD", "SHADED", "SHADOW", "SUBTRACT", NULL };
|
||||
"TRANSLUCENT", "ADD", "SHADED", "SHADOW", "SUBTRACT", "ADDSTENCIL", "ADDSHADED", NULL };
|
||||
|
||||
static const int renderstyle_values[]={
|
||||
STYLE_None, STYLE_Normal, STYLE_Fuzzy, STYLE_SoulTrans, STYLE_OptFuzzy,
|
||||
STYLE_TranslucentStencil, STYLE_Translucent, STYLE_Add, STYLE_Shaded,
|
||||
STYLE_Shadow, STYLE_Subtract};
|
||||
STYLE_Shadow, STYLE_Subtract, STYLE_AddStencil, STYLE_AddShaded};
|
||||
|
||||
// make this work for old style decorations, too.
|
||||
if (!strnicmp(str, "style_", 6)) str+=6;
|
||||
|
|
|
@ -1407,7 +1407,7 @@ void V_SetBorderNeedRefresh()
|
|||
void V_DrawFrame (int left, int top, int width, int height)
|
||||
{
|
||||
FTexture *p;
|
||||
const gameborder_t *border = gameinfo.border;
|
||||
const gameborder_t *border = &gameinfo.Border;
|
||||
// Sanity check for incomplete gameinfo
|
||||
if (border == NULL)
|
||||
return;
|
||||
|
@ -1450,7 +1450,7 @@ void V_DrawBorder (int x1, int y1, int x2, int y2)
|
|||
}
|
||||
else
|
||||
{
|
||||
picnum = TexMan.CheckForTexture (gameinfo.borderFlat, FTexture::TEX_Flat);
|
||||
picnum = TexMan.CheckForTexture (gameinfo.BorderFlat, FTexture::TEX_Flat);
|
||||
}
|
||||
|
||||
if (picnum.isValid())
|
||||
|
@ -1513,28 +1513,28 @@ static void V_DrawTopBorder ()
|
|||
if (viewwidth == SCREENWIDTH)
|
||||
return;
|
||||
|
||||
offset = gameinfo.border->offset;
|
||||
offset = gameinfo.Border.offset;
|
||||
|
||||
if (viewwindowy < 34)
|
||||
{
|
||||
V_DrawBorder (0, 0, viewwindowx, 34);
|
||||
V_DrawBorder (viewwindowx, 0, viewwindowx + viewwidth, viewwindowy);
|
||||
V_DrawBorder (viewwindowx + viewwidth, 0, SCREENWIDTH, 34);
|
||||
p = TexMan(gameinfo.border->t);
|
||||
p = TexMan(gameinfo.Border.t);
|
||||
screen->FlatFill(viewwindowx, viewwindowy - p->GetHeight(),
|
||||
viewwindowx + viewwidth, viewwindowy, p, true);
|
||||
|
||||
p = TexMan(gameinfo.border->l);
|
||||
p = TexMan(gameinfo.Border.l);
|
||||
screen->FlatFill(viewwindowx - p->GetWidth(), viewwindowy,
|
||||
viewwindowx, 35, p, true);
|
||||
p = TexMan(gameinfo.border->r);
|
||||
p = TexMan(gameinfo.Border.r);
|
||||
screen->FlatFill(viewwindowx + viewwidth, viewwindowy,
|
||||
viewwindowx + viewwidth + p->GetWidth(), 35, p, true);
|
||||
|
||||
p = TexMan(gameinfo.border->tl);
|
||||
p = TexMan(gameinfo.Border.tl);
|
||||
screen->DrawTexture (p, viewwindowx - offset, viewwindowy - offset, TAG_DONE);
|
||||
|
||||
p = TexMan(gameinfo.border->tr);
|
||||
p = TexMan(gameinfo.Border.tr);
|
||||
screen->DrawTexture (p, viewwindowx + viewwidth, viewwindowy - offset, TAG_DONE);
|
||||
}
|
||||
else
|
||||
|
|
|
@ -2193,19 +2193,6 @@ void V_InitCustomFonts()
|
|||
FTexture **p = &lumplist[*(unsigned char*)sc.String];
|
||||
sc.MustGetString();
|
||||
FTextureID texid = TexMan.CheckForTexture(sc.String, FTexture::TEX_MiscPatch);
|
||||
if (!texid.Exists())
|
||||
{
|
||||
int lumpno = Wads.CheckNumForFullName (sc.String);
|
||||
if (lumpno >= 0)
|
||||
{
|
||||
texid = TexMan.FindTextureByLumpNum(lumpno);
|
||||
if (!texid.Exists())
|
||||
{
|
||||
FTexture *tex = FTexture::CreateTexture("", lumpno, FTexture::TEX_MiscPatch);
|
||||
texid = TexMan.AddTexture(tex);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (texid.Exists())
|
||||
{
|
||||
*p = TexMan[texid];
|
||||
|
|
|
@ -548,6 +548,37 @@ int FWadCollection::GetNumForFullName (const char *name)
|
|||
return i;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// link a texture with a given lump
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
void FWadCollection::SetLinkedTexture(int lump, FTexture *tex)
|
||||
{
|
||||
if ((size_t)lump < NumLumps)
|
||||
{
|
||||
FResourceLump *reslump = LumpInfo[lump].lump;
|
||||
reslump->LinkedTexture = tex;
|
||||
}
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// retrieve linked texture
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
FTexture *FWadCollection::GetLinkedTexture(int lump)
|
||||
{
|
||||
if ((size_t)lump < NumLumps)
|
||||
{
|
||||
FResourceLump *reslump = LumpInfo[lump].lump;
|
||||
return reslump->LinkedTexture;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// W_LumpLength
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
|
||||
class FResourceFile;
|
||||
struct FResourceLump;
|
||||
class FTexture;
|
||||
|
||||
struct wadinfo_t
|
||||
{
|
||||
|
@ -171,6 +172,9 @@ public:
|
|||
int CheckNumForFullName (const char *name, int wadfile);
|
||||
int GetNumForFullName (const char *name);
|
||||
|
||||
void SetLinkedTexture(int lump, FTexture *tex);
|
||||
FTexture *GetLinkedTexture(int lump);
|
||||
|
||||
|
||||
void ReadLump (int lump, void *dest);
|
||||
FMemLump ReadLump (int lump);
|
||||
|
|
|
@ -314,7 +314,7 @@ static bool IsExMy(const char * name)
|
|||
|
||||
void WI_LoadBackground(bool isenterpic)
|
||||
{
|
||||
const char * lumpname = NULL;
|
||||
const char *lumpname = NULL;
|
||||
char buffer[10];
|
||||
in_anim_t an;
|
||||
lnode_t pt;
|
||||
|
@ -399,7 +399,7 @@ void WI_LoadBackground(bool isenterpic)
|
|||
default:
|
||||
// Strife doesn't have an intermission pic so choose something neutral.
|
||||
if (isenterpic) return;
|
||||
lumpname = gameinfo.borderFlat;
|
||||
lumpname = gameinfo.BorderFlat;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1061,11 +1061,7 @@ void DoomSpecificInfo (char *buffer, size_t bufflen)
|
|||
}
|
||||
else
|
||||
{
|
||||
char name[9];
|
||||
|
||||
strncpy (name, level.mapname, 8);
|
||||
name[8] = 0;
|
||||
buffer += mysnprintf (buffer, buffend - buffer, "\r\n\r\nCurrent map: %s", name);
|
||||
buffer += mysnprintf (buffer, buffend - buffer, "\r\n\r\nCurrent map: %s", level.MapName.GetChars());
|
||||
|
||||
if (!viewactive)
|
||||
{
|
||||
|
|
|
@ -1086,12 +1086,12 @@ void ST_Endoom()
|
|||
{
|
||||
if (showendoom == 0) exit(0);
|
||||
|
||||
if (gameinfo.Endoom[0] == 0)
|
||||
if (gameinfo.Endoom.Len() == 0)
|
||||
{
|
||||
exit(0);
|
||||
}
|
||||
|
||||
int endoom_lump = Wads.CheckNumForName (gameinfo.Endoom);
|
||||
int endoom_lump = Wads.CheckNumForFullName (gameinfo.Endoom, true);
|
||||
|
||||
BYTE endoom_screen[4000];
|
||||
BYTE *font;
|
||||
|
|
|
@ -299,7 +299,7 @@ void DoBlending_SSE2(const PalEntry *from, PalEntry *to, int count, int r, int g
|
|||
}
|
||||
#endif
|
||||
|
||||
#if defined(__amd64__) || defined(_M_IX64)
|
||||
#if defined(__amd64__) || defined(_M_X64)
|
||||
long long color;
|
||||
|
||||
blending256 = _mm_set_epi64x(0x10001000100ll, 0x10001000100ll);
|
||||
|
|
|
@ -349,7 +349,14 @@ FString &FString::AppendCStrPart (const char *tail, size_t tailLen)
|
|||
return *this;
|
||||
}
|
||||
|
||||
void FString::Truncate (long newlen)
|
||||
FString &FString::CopyCStrPart(const char *tail, size_t tailLen)
|
||||
{
|
||||
ReallocBuffer(tailLen);
|
||||
StrCopy(Chars, tail, tailLen);
|
||||
return *this;
|
||||
}
|
||||
|
||||
void FString::Truncate(long newlen)
|
||||
{
|
||||
if (newlen >= 0 && newlen < (long)Len())
|
||||
{
|
||||
|
|
|
@ -167,6 +167,7 @@ public:
|
|||
FString &operator += (char tail);
|
||||
FString &operator += (const FName &name) { return *this += name.GetChars(); }
|
||||
FString &AppendCStrPart (const char *tail, size_t tailLen);
|
||||
FString &CopyCStrPart(const char *tail, size_t tailLen);
|
||||
|
||||
FString &operator << (const FString &tail) { return *this += tail; }
|
||||
FString &operator << (const char *tail) { return *this += tail; }
|
||||
|
@ -252,9 +253,13 @@ public:
|
|||
|
||||
int Compare (const FString &other) const { return strcmp (Chars, other.Chars); }
|
||||
int Compare (const char *other) const { return strcmp (Chars, other); }
|
||||
int Compare(const FString &other, int len) const { return strncmp(Chars, other.Chars, len); }
|
||||
int Compare(const char *other, int len) const { return strncmp(Chars, other, len); }
|
||||
|
||||
int CompareNoCase (const FString &other) const { return stricmp (Chars, other.Chars); }
|
||||
int CompareNoCase (const char *other) const { return stricmp (Chars, other); }
|
||||
int CompareNoCase(const FString &other, int len) const { return strnicmp(Chars, other.Chars, len); }
|
||||
int CompareNoCase(const char *other, int len) const { return strnicmp(Chars, other, len); }
|
||||
|
||||
protected:
|
||||
const FStringData *Data() const { return (FStringData *)Chars - 1; }
|
||||
|
|
|
@ -40,6 +40,7 @@ gameinfo
|
|||
definventorymaxamount = 25
|
||||
defaultrespawntime = 12
|
||||
defaultdropstyle = 1
|
||||
dontcrunchcorpses = true
|
||||
endoom = "ENDOOM"
|
||||
player5start = 4001
|
||||
drawreadthis = true
|
||||
|
|
Loading…
Reference in a new issue