mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-29 15:22:08 +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
|
October 23, 2006
|
||||||
- Added the A_JumpSet function for what seems to be a fairly common scenario.
|
- 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
|
It is like A_Jump, except it accepts up to 20 jump targets. The jump
|
||||||
|
|
|
@ -230,7 +230,6 @@ static const char *MapInfoMapLevel[] =
|
||||||
"strictmonsteractivation",
|
"strictmonsteractivation",
|
||||||
"laxmonsteractivation",
|
"laxmonsteractivation",
|
||||||
"additive_scrollers",
|
"additive_scrollers",
|
||||||
"cod_level",
|
|
||||||
"interpic",
|
"interpic",
|
||||||
"exitpic",
|
"exitpic",
|
||||||
"enterpic",
|
"enterpic",
|
||||||
|
@ -361,7 +360,6 @@ MapHandlers[] =
|
||||||
{ MITYPE_CLRFLAG, LEVEL_LAXMONSTERACTIVATION, LEVEL_LAXACTIVATIONMAPINFO },
|
{ MITYPE_CLRFLAG, LEVEL_LAXMONSTERACTIVATION, LEVEL_LAXACTIVATIONMAPINFO },
|
||||||
{ MITYPE_SETFLAG, LEVEL_LAXMONSTERACTIVATION, LEVEL_LAXACTIVATIONMAPINFO },
|
{ MITYPE_SETFLAG, LEVEL_LAXMONSTERACTIVATION, LEVEL_LAXACTIVATIONMAPINFO },
|
||||||
{ MITYPE_COMPATFLAG, COMPATF_BOOMSCROLL},
|
{ MITYPE_COMPATFLAG, COMPATF_BOOMSCROLL},
|
||||||
{ MITYPE_SETFLAG, LEVEL_CAVERNS_OF_DARKNESS, 0 },
|
|
||||||
{ MITYPE_LUMPNAME, lioffset(exitpic), 0 },
|
{ MITYPE_LUMPNAME, lioffset(exitpic), 0 },
|
||||||
{ MITYPE_LUMPNAME, lioffset(exitpic), 0 },
|
{ MITYPE_LUMPNAME, lioffset(exitpic), 0 },
|
||||||
{ MITYPE_LUMPNAME, lioffset(enterpic), 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_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_LAXACTIVATIONMAPINFO UCONST64(0x800000000) // LEVEL_LAXMONSTERACTIVATION is not a default.
|
||||||
|
// some unused bits here!
|
||||||
#define LEVEL_CAVERNS_OF_DARKNESS UCONST64(0x2000000000) // to translate the special sector types of CoD.
|
|
||||||
|
|
||||||
#define LEVEL_KEEPFULLINVENTORY UCONST64(0x4000000000) // doesn't reduce the amount of inventory items to 1
|
#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)
|
switch (ld->special)
|
||||||
{
|
{
|
||||||
case Line_SetIdentification:
|
case Line_SetIdentification:
|
||||||
ld->id = ld->args[0];
|
ld->id = ld->args[0] + 256 * ld->args[4];
|
||||||
ld->flags |= ld->args[1]<<16;
|
ld->flags |= ld->args[1]<<16;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
178
src/p_xlat.cpp
178
src/p_xlat.cpp
|
@ -46,6 +46,8 @@
|
||||||
#include "a_sharedglobal.h"
|
#include "a_sharedglobal.h"
|
||||||
#include "gi.h"
|
#include "gi.h"
|
||||||
#include "w_wad.h"
|
#include "w_wad.h"
|
||||||
|
#include "sc_man.h"
|
||||||
|
#include "cmdlib.h"
|
||||||
|
|
||||||
// define names for the TriggerType field of the general linedefs
|
// 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 P_TranslateSectorSpecial (int special)
|
||||||
{
|
{
|
||||||
int high;
|
int high;
|
||||||
|
@ -425,63 +542,14 @@ int P_TranslateSectorSpecial (int special)
|
||||||
return special & 0x7fff;
|
return special & 0x7fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (special == 9)
|
if (!secparsed) P_ReadSectorSpecials();
|
||||||
{
|
|
||||||
return SECRET_MASK;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (gameinfo.gametype == GAME_Doom || gameinfo.gametype == GAME_Strife)
|
if (special>=0 && special<=255)
|
||||||
{
|
{
|
||||||
// This supports phased lighting with specials 21-24
|
if (sectortables[0][special]>=0) return sectortables[0][special];
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
high = (special & boommask) << boomshift;
|
||||||
|
special &= (~boommask) & 255;
|
||||||
|
|
||||||
return high | special;
|
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
|
doomx.lmp xlat/doom.x
|
||||||
hereticx.lmp xlat/heretic.x
|
hereticx.lmp xlat/heretic.x
|
||||||
strifex.lmp xlat/strife.x
|
strifex.lmp xlat/strife.x
|
||||||
|
sectorx.txt sectorx.txt
|
||||||
|
|
||||||
animated.lmp animated.lmp
|
animated.lmp animated.lmp
|
||||||
spaldoom.lmp spaldoom.lmp
|
spaldoom.lmp spaldoom.lmp
|
||||||
|
|
Loading…
Reference in a new issue