mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-10 14:51:51 +00:00
- Moved the sector type translation for Doom format maps into a simple lump
in zdoom.pk3. - Changed Line_SetIdentification so that the fifth arg is a high-byte for the line ID. SVN r361 (trunk)
This commit is contained in:
parent
2efba66558
commit
753f280e04
7 changed files with 163 additions and 62 deletions
|
@ -1,3 +1,8 @@
|
|||
October 25, 2006 (Changes by Graf Zahl)
|
||||
- Moved the sector type translation for Doom format maps into a simple lump
|
||||
in zdoom.pk3.
|
||||
- Changed Line_SetIdentification so that the fifth arg is a high-byte for the line ID.
|
||||
|
||||
October 23, 2006
|
||||
- Added the A_JumpSet function for what seems to be a fairly common scenario.
|
||||
It is like A_Jump, except it accepts up to 20 jump targets. The jump
|
||||
|
|
|
@ -230,7 +230,6 @@ static const char *MapInfoMapLevel[] =
|
|||
"strictmonsteractivation",
|
||||
"laxmonsteractivation",
|
||||
"additive_scrollers",
|
||||
"cod_level",
|
||||
"interpic",
|
||||
"exitpic",
|
||||
"enterpic",
|
||||
|
@ -361,7 +360,6 @@ MapHandlers[] =
|
|||
{ MITYPE_CLRFLAG, LEVEL_LAXMONSTERACTIVATION, LEVEL_LAXACTIVATIONMAPINFO },
|
||||
{ MITYPE_SETFLAG, LEVEL_LAXMONSTERACTIVATION, LEVEL_LAXACTIVATIONMAPINFO },
|
||||
{ MITYPE_COMPATFLAG, COMPATF_BOOMSCROLL},
|
||||
{ MITYPE_SETFLAG, LEVEL_CAVERNS_OF_DARKNESS, 0 },
|
||||
{ MITYPE_LUMPNAME, lioffset(exitpic), 0 },
|
||||
{ MITYPE_LUMPNAME, lioffset(exitpic), 0 },
|
||||
{ MITYPE_LUMPNAME, lioffset(enterpic), 0 },
|
||||
|
|
|
@ -92,8 +92,7 @@
|
|||
|
||||
#define LEVEL_LAXMONSTERACTIVATION UCONST64(0x400000000) // Monsters can open doors depending on the door speed
|
||||
#define LEVEL_LAXACTIVATIONMAPINFO UCONST64(0x800000000) // LEVEL_LAXMONSTERACTIVATION is not a default.
|
||||
|
||||
#define LEVEL_CAVERNS_OF_DARKNESS UCONST64(0x2000000000) // to translate the special sector types of CoD.
|
||||
// some unused bits here!
|
||||
|
||||
#define LEVEL_KEEPFULLINVENTORY UCONST64(0x4000000000) // doesn't reduce the amount of inventory items to 1
|
||||
|
||||
|
|
|
@ -1651,7 +1651,7 @@ void P_AdjustLine (line_t *ld)
|
|||
switch (ld->special)
|
||||
{
|
||||
case Line_SetIdentification:
|
||||
ld->id = ld->args[0];
|
||||
ld->id = ld->args[0] + 256 * ld->args[4];
|
||||
ld->flags |= ld->args[1]<<16;
|
||||
break;
|
||||
|
||||
|
|
182
src/p_xlat.cpp
182
src/p_xlat.cpp
|
@ -46,6 +46,8 @@
|
|||
#include "a_sharedglobal.h"
|
||||
#include "gi.h"
|
||||
#include "w_wad.h"
|
||||
#include "sc_man.h"
|
||||
#include "cmdlib.h"
|
||||
|
||||
// define names for the TriggerType field of the general linedefs
|
||||
|
||||
|
@ -414,6 +416,121 @@ void P_TranslateTeleportThings ()
|
|||
}
|
||||
}
|
||||
|
||||
static short sectortables[2][256];
|
||||
static int boommask=0, boomshift=0;
|
||||
static bool secparsed;
|
||||
|
||||
void P_ReadSectorSpecials()
|
||||
{
|
||||
secparsed=true;
|
||||
for(int i=0;i<256;i++)
|
||||
{
|
||||
sectortables[0][i]=-1;
|
||||
sectortables[1][i]=i;
|
||||
}
|
||||
|
||||
int lastlump=0, lump;
|
||||
|
||||
lastlump = 0;
|
||||
while ((lump = Wads.FindLump ("SECTORX", &lastlump)) != -1)
|
||||
{
|
||||
SC_OpenLumpNum (lump, "SECTORX");
|
||||
SC_SetCMode(true);
|
||||
while (SC_GetString())
|
||||
{
|
||||
if (SC_Compare("IFDOOM"))
|
||||
{
|
||||
SC_MustGetStringName("{");
|
||||
if (gameinfo.gametype != GAME_Doom)
|
||||
{
|
||||
do
|
||||
{
|
||||
if (!SC_GetString())
|
||||
{
|
||||
SC_ScriptError("Unexpected end of file");
|
||||
}
|
||||
}
|
||||
while (!SC_Compare("}"));
|
||||
}
|
||||
}
|
||||
else if (SC_Compare("IFHERETIC"))
|
||||
{
|
||||
SC_MustGetStringName("{");
|
||||
if (gameinfo.gametype != GAME_Heretic)
|
||||
{
|
||||
do
|
||||
{
|
||||
if (!SC_GetString())
|
||||
{
|
||||
SC_ScriptError("Unexpected end of file");
|
||||
}
|
||||
}
|
||||
while (!SC_Compare("}"));
|
||||
}
|
||||
}
|
||||
else if (SC_Compare("IFSTRIFE"))
|
||||
{
|
||||
SC_MustGetStringName("{");
|
||||
if (gameinfo.gametype != GAME_Strife)
|
||||
{
|
||||
do
|
||||
{
|
||||
if (!SC_GetString())
|
||||
{
|
||||
SC_ScriptError("Unexpected end of file");
|
||||
}
|
||||
}
|
||||
while (!SC_Compare("}"));
|
||||
}
|
||||
}
|
||||
else if (SC_Compare("}"))
|
||||
{
|
||||
// ignore
|
||||
}
|
||||
else if (SC_Compare("BOOMMASK"))
|
||||
{
|
||||
SC_MustGetNumber();
|
||||
boommask = sc_Number;
|
||||
SC_MustGetStringName(",");
|
||||
SC_MustGetNumber();
|
||||
boomshift = sc_Number;
|
||||
}
|
||||
else if (SC_Compare("["))
|
||||
{
|
||||
int start;
|
||||
int end;
|
||||
|
||||
SC_MustGetNumber();
|
||||
start = sc_Number;
|
||||
SC_MustGetStringName(",");
|
||||
SC_MustGetNumber();
|
||||
end = sc_Number;
|
||||
SC_MustGetStringName("]");
|
||||
SC_MustGetStringName(":");
|
||||
SC_MustGetNumber();
|
||||
for(int j=start;j<=end;j++)
|
||||
{
|
||||
sectortables[!!boommask][j]=sc_Number + j - start;
|
||||
}
|
||||
}
|
||||
else if (IsNum(sc_String))
|
||||
{
|
||||
int start;
|
||||
|
||||
start = atoi(sc_String);
|
||||
SC_MustGetStringName(":");
|
||||
SC_MustGetNumber();
|
||||
sectortables[!!boommask][start]=sc_Number;
|
||||
}
|
||||
else
|
||||
{
|
||||
SC_ScriptError(NULL);
|
||||
}
|
||||
}
|
||||
SC_Close ();
|
||||
}
|
||||
}
|
||||
|
||||
int P_TranslateSectorSpecial (int special)
|
||||
{
|
||||
int high;
|
||||
|
@ -425,63 +542,14 @@ int P_TranslateSectorSpecial (int special)
|
|||
return special & 0x7fff;
|
||||
}
|
||||
|
||||
if (special == 9)
|
||||
if (!secparsed) P_ReadSectorSpecials();
|
||||
|
||||
if (special>=0 && special<=255)
|
||||
{
|
||||
return SECRET_MASK;
|
||||
if (sectortables[0][special]>=0) return sectortables[0][special];
|
||||
}
|
||||
|
||||
if (gameinfo.gametype == GAME_Doom || gameinfo.gametype == GAME_Strife)
|
||||
{
|
||||
// This supports phased lighting with specials 21-24
|
||||
high = (special & 0xfe0) << 3;
|
||||
special &= 0x1f;
|
||||
if (special < 21)
|
||||
{
|
||||
if (gameinfo.gametype == GAME_Strife)
|
||||
{
|
||||
if (special == 4 || special == 5 || special == 15 || special == 16 || special == 18)
|
||||
{
|
||||
return high | (special + 100);
|
||||
}
|
||||
}
|
||||
else if (level.flags & LEVEL_CAVERNS_OF_DARKNESS)
|
||||
{
|
||||
// CoD uses 18 as an instant death sector type and 19 for healing the player
|
||||
if (special == 18) return high | Damage_InstantDeath;
|
||||
if (special == 19) return high | Sector_Heal;
|
||||
}
|
||||
return high | (special + 64);
|
||||
}
|
||||
else if (special < 40)
|
||||
{
|
||||
return high | (special - 20);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
high = (special & 0xfc0) << 3;
|
||||
special &= 0x3f;
|
||||
if (special == 5)
|
||||
{
|
||||
return high | dDamage_LavaWimpy;
|
||||
}
|
||||
else if (special == 16)
|
||||
{
|
||||
return high | dDamage_LavaHefty;
|
||||
}
|
||||
else if (special == 4)
|
||||
{
|
||||
return high | dScroll_EastLavaDamage;
|
||||
}
|
||||
else if (special < 20)
|
||||
{
|
||||
return high | (special + 64);
|
||||
}
|
||||
else if (special < 40)
|
||||
{
|
||||
return high | (special + 205);
|
||||
}
|
||||
}
|
||||
|
||||
return high | special;
|
||||
high = (special & boommask) << boomshift;
|
||||
special &= (~boommask) & 255;
|
||||
|
||||
return sectortables[1][special] | high;
|
||||
}
|
||||
|
|
30
wadsrc/sectorx.txt
Normal file
30
wadsrc/sectorx.txt
Normal file
|
@ -0,0 +1,30 @@
|
|||
9: 1024 // this is done before masking out the Boom bits.
|
||||
|
||||
ifdoom
|
||||
{
|
||||
boommask 0xfe0, 3
|
||||
[1,20] : 65
|
||||
[21,40] : 1
|
||||
}
|
||||
|
||||
ifheretic
|
||||
{
|
||||
boommask 0xfc0, 3
|
||||
|
||||
[1,19] : 65
|
||||
[20,40] :225
|
||||
5 : 82
|
||||
16 : 83
|
||||
4 : 84
|
||||
}
|
||||
|
||||
ifstrife
|
||||
{
|
||||
boommask 0xfe0, 3
|
||||
[1,20] : 65
|
||||
[21,40] : 1
|
||||
[4,5] : 104
|
||||
[15,16] : 115
|
||||
18: 118
|
||||
}
|
||||
|
|
@ -66,6 +66,7 @@ dehsupp.lmp dehsupp.lmp
|
|||
doomx.lmp xlat/doom.x
|
||||
hereticx.lmp xlat/heretic.x
|
||||
strifex.lmp xlat/strife.x
|
||||
sectorx.txt sectorx.txt
|
||||
|
||||
animated.lmp animated.lmp
|
||||
spaldoom.lmp spaldoom.lmp
|
||||
|
|
Loading…
Reference in a new issue