mirror of
https://github.com/ZDoom/qzdoom-gpl.git
synced 2024-12-11 04:41:06 +00:00
Merge branch 'zmaster'
This commit is contained in:
commit
ea6c498470
12 changed files with 134 additions and 33 deletions
|
@ -203,7 +203,11 @@ Note: All <bool> fields default to false unless mentioned otherwise.
|
||||||
// sound sequence thing in the sector will override this property.
|
// sound sequence thing in the sector will override this property.
|
||||||
hidden = <bool>; // if true this sector will not be drawn on the textured automap.
|
hidden = <bool>; // if true this sector will not be drawn on the textured automap.
|
||||||
waterzone = <bool>; // Sector is under water and swimmable
|
waterzone = <bool>; // Sector is under water and swimmable
|
||||||
moreids = <string>; // Additional sector IDs/tags, specified as a space separated list of numbers (e.g. "2 666 1003 4505")
|
moreids = <string>; // Additional sector IDs/tags, specified as a space separated list of numbers (e.g. "2 666 1003 4505")
|
||||||
|
damageamount = <int>; // Amount of damage inflicted by this sector, default = 0
|
||||||
|
damagetype = <string>; // Damage type for sector damage, Default = "None". (generic damage)
|
||||||
|
damageinterval = <int>; // Interval in tics between damage application, default = 32.
|
||||||
|
leakiness = <int>; // Probability of leaking through radiation suit (0 = never, 256 = always), default = 0.
|
||||||
|
|
||||||
* Note about dropactors
|
* Note about dropactors
|
||||||
|
|
||||||
|
@ -377,6 +381,10 @@ Changed language describing the DIALOGUE lump to mention USDF as an option.
|
||||||
1.25 19.04.2015
|
1.25 19.04.2015
|
||||||
Added 'moreids' for linedefs and sectors.
|
Added 'moreids' for linedefs and sectors.
|
||||||
|
|
||||||
|
1.26 05.01.2016
|
||||||
|
added clarification about character encoding
|
||||||
|
added sector damage properties.
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
EOF
|
EOF
|
||||||
===============================================================================
|
===============================================================================
|
||||||
|
|
|
@ -357,7 +357,7 @@ bool FCajunMaster::IsDangerous (sector_t *sec)
|
||||||
int special;
|
int special;
|
||||||
|
|
||||||
return
|
return
|
||||||
sec->damage
|
sec->damageamount
|
||||||
|| sec->special & DAMAGE_MASK
|
|| sec->special & DAMAGE_MASK
|
||||||
|| (special = sec->special & 0xff, special == dLight_Strobe_Hurt)
|
|| (special = sec->special & 0xff, special == dLight_Strobe_Hurt)
|
||||||
|| special == dDamage_Hellslime
|
|| special == dDamage_Hellslime
|
||||||
|
@ -367,6 +367,7 @@ bool FCajunMaster::IsDangerous (sector_t *sec)
|
||||||
|| special == dDamage_LavaWimpy
|
|| special == dDamage_LavaWimpy
|
||||||
|| special == dDamage_LavaHefty
|
|| special == dDamage_LavaHefty
|
||||||
|| special == dScroll_EastLavaDamage
|
|| special == dScroll_EastLavaDamage
|
||||||
|
|| special == hDamage_Sludge
|
||||||
|| special == sLight_Strobe_Hurt
|
|| special == sLight_Strobe_Hurt
|
||||||
|| special == Damage_InstantDeath
|
|| special == Damage_InstantDeath
|
||||||
|| special == sDamage_SuperHellslime;
|
|| special == sDamage_SuperHellslime;
|
||||||
|
|
|
@ -506,6 +506,10 @@ xx(floorplane_a)
|
||||||
xx(floorplane_b)
|
xx(floorplane_b)
|
||||||
xx(floorplane_c)
|
xx(floorplane_c)
|
||||||
xx(floorplane_d)
|
xx(floorplane_d)
|
||||||
|
xx(damageamount)
|
||||||
|
xx(damagetype)
|
||||||
|
xx(damageinterval)
|
||||||
|
xx(leakiness)
|
||||||
|
|
||||||
// USDF keywords
|
// USDF keywords
|
||||||
xx(Amount)
|
xx(Amount)
|
||||||
|
|
|
@ -345,7 +345,7 @@ void P_PlayerOnSpecial3DFloor(player_t* player)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apply sector specials
|
// Apply sector specials
|
||||||
if (rover->model->special || rover->model->damage)
|
if (rover->model->special || rover->model->damageamount)
|
||||||
P_PlayerInSpecialSector(player, rover->model);
|
P_PlayerInSpecialSector(player, rover->model);
|
||||||
|
|
||||||
// Apply flat specials (using the ceiling!)
|
// Apply flat specials (using the ceiling!)
|
||||||
|
|
|
@ -4458,6 +4458,7 @@ enum EACSFunctions
|
||||||
ACSF_QuakeEx,
|
ACSF_QuakeEx,
|
||||||
ACSF_Warp, // 92
|
ACSF_Warp, // 92
|
||||||
ACSF_GetMaxInventory,
|
ACSF_GetMaxInventory,
|
||||||
|
ACSF_SetSectorDamage,
|
||||||
|
|
||||||
/* Zandronum's - these must be skipped when we reach 99!
|
/* Zandronum's - these must be skipped when we reach 99!
|
||||||
-100:ResetMap(0),
|
-100:ResetMap(0),
|
||||||
|
@ -5950,6 +5951,23 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ACSF_SetSectorDamage:
|
||||||
|
if (argCount >= 2)
|
||||||
|
{
|
||||||
|
FSectorTagIterator it(args[0]);
|
||||||
|
int s;
|
||||||
|
while ((s = it.Next()) >= 0)
|
||||||
|
{
|
||||||
|
sector_t *sec = §ors[s];
|
||||||
|
|
||||||
|
sec->damageamount = args[1];
|
||||||
|
sec->damagetype = argCount >= 3 ? FName(FBehavior::StaticLookupString(args[2])) : FName(NAME_None);
|
||||||
|
sec->damageinterval = argCount >= 4 ? clamp(args[3], 1, INT_MAX) : 32;
|
||||||
|
sec->leakydamage = argCount >= 5 ? args[4] : 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2246,7 +2246,7 @@ FUNC(LS_PointPush_SetForce)
|
||||||
}
|
}
|
||||||
|
|
||||||
FUNC(LS_Sector_SetDamage)
|
FUNC(LS_Sector_SetDamage)
|
||||||
// Sector_SetDamage (tag, amount, mod)
|
// Sector_SetDamage (tag, amount, mod, interval, leaky)
|
||||||
{
|
{
|
||||||
// The sector still stores the mod in its old format because
|
// The sector still stores the mod in its old format because
|
||||||
// adding an FName to the sector_t structure might cause
|
// adding an FName to the sector_t structure might cause
|
||||||
|
@ -2257,8 +2257,28 @@ FUNC(LS_Sector_SetDamage)
|
||||||
int secnum;
|
int secnum;
|
||||||
while ((secnum = itr.Next()) >= 0)
|
while ((secnum = itr.Next()) >= 0)
|
||||||
{
|
{
|
||||||
sectors[secnum].damage = arg1;
|
if (arg3 <= 0) // emulate old and hacky method to handle leakiness.
|
||||||
sectors[secnum].mod = arg2;
|
{
|
||||||
|
if (arg1 < 20)
|
||||||
|
{
|
||||||
|
arg4 = 0;
|
||||||
|
arg3 = 32;
|
||||||
|
}
|
||||||
|
else if (arg1 < 50)
|
||||||
|
{
|
||||||
|
arg4 = 5;
|
||||||
|
arg3 = 32;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
arg4 = 256;
|
||||||
|
arg3 = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sectors[secnum].damageamount = (short)arg1;
|
||||||
|
sectors[secnum].damagetype = MODtoDamageType(arg2);
|
||||||
|
sectors[secnum].damageinterval = (short)arg3;
|
||||||
|
sectors[secnum].leakydamage = (short)arg4;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -354,7 +354,7 @@ void P_SerializeWorld (FArchive &arc)
|
||||||
short tag;
|
short tag;
|
||||||
arc << tag;
|
arc << tag;
|
||||||
}
|
}
|
||||||
arc << sec->soundtraversed
|
arc << sec->soundtraversed
|
||||||
<< sec->seqType
|
<< sec->seqType
|
||||||
<< sec->friction
|
<< sec->friction
|
||||||
<< sec->movefactor
|
<< sec->movefactor
|
||||||
|
@ -369,9 +369,36 @@ void P_SerializeWorld (FArchive &arc)
|
||||||
<< sec->heightsec
|
<< sec->heightsec
|
||||||
<< sec->bottommap << sec->midmap << sec->topmap
|
<< sec->bottommap << sec->midmap << sec->topmap
|
||||||
<< sec->gravity
|
<< sec->gravity
|
||||||
<< sec->damage
|
<< sec->damageamount;
|
||||||
<< sec->mod
|
if (SaveVersion >= 4528)
|
||||||
<< sec->SoundTarget
|
{
|
||||||
|
arc << sec->damageinterval
|
||||||
|
<< sec->leakydamage
|
||||||
|
<< sec->damagetype;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
short damagemod;
|
||||||
|
arc << damagemod;
|
||||||
|
sec->damagetype = MODtoDamageType(damagemod);
|
||||||
|
if (sec->damageamount < 20)
|
||||||
|
{
|
||||||
|
sec->leakydamage = 0;
|
||||||
|
sec->damageinterval = 32;
|
||||||
|
}
|
||||||
|
else if (sec->damageamount < 50)
|
||||||
|
{
|
||||||
|
sec->leakydamage = 5;
|
||||||
|
sec->damageinterval = 32;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sec->leakydamage = 256;
|
||||||
|
sec->damageinterval = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
arc << sec->SoundTarget
|
||||||
<< sec->SecActTarget
|
<< sec->SecActTarget
|
||||||
<< sec->sky
|
<< sec->sky
|
||||||
<< sec->MoreFlags
|
<< sec->MoreFlags
|
||||||
|
|
|
@ -566,24 +566,11 @@ void P_PlayerInSpecialSector (player_t *player, sector_t * sector)
|
||||||
}
|
}
|
||||||
|
|
||||||
// [RH] Apply any customizable damage
|
// [RH] Apply any customizable damage
|
||||||
if (sector->damage)
|
if (sector->damageamount != 0)
|
||||||
{
|
{
|
||||||
if (sector->damage < 20)
|
if (level.time % sector->damageinterval == 0 && (ironfeet == NULL || pr_playerinspecialsector() < sector->leakydamage))
|
||||||
{
|
{
|
||||||
if (ironfeet == NULL && !(level.time&0x1f))
|
P_DamageMobj (player->mo, NULL, NULL, sector->damageamount, sector->damagetype);
|
||||||
P_DamageMobj (player->mo, NULL, NULL, sector->damage, MODtoDamageType (sector->mod));
|
|
||||||
}
|
|
||||||
else if (sector->damage < 50)
|
|
||||||
{
|
|
||||||
if ((ironfeet == NULL || (pr_playerinspecialsector()<5))
|
|
||||||
&& !(level.time&0x1f))
|
|
||||||
{
|
|
||||||
P_DamageMobj (player->mo, NULL, NULL, sector->damage, MODtoDamageType (sector->mod));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
P_DamageMobj (player->mo, NULL, NULL, sector->damage, MODtoDamageType (sector->mod));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1450,8 +1437,24 @@ void P_SpawnSpecials (void)
|
||||||
FSectorTagIterator itr(lines[i].args[0]);
|
FSectorTagIterator itr(lines[i].args[0]);
|
||||||
while ((s = itr.Next()) >= 0)
|
while ((s = itr.Next()) >= 0)
|
||||||
{
|
{
|
||||||
sectors[s].damage = damage;
|
sector_t *sec = §ors[s];
|
||||||
sectors[s].mod = 0;//MOD_UNKNOWN;
|
sec->damageamount = damage;
|
||||||
|
sec->damagetype = NAME_None;
|
||||||
|
if (sec->damageamount < 20)
|
||||||
|
{
|
||||||
|
sec->leakydamage = 0;
|
||||||
|
sec->damageinterval = 32;
|
||||||
|
}
|
||||||
|
else if (sec->damageamount < 50)
|
||||||
|
{
|
||||||
|
sec->leakydamage = 5;
|
||||||
|
sec->damageinterval = 32;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sec->leakydamage = 256;
|
||||||
|
sec->damageinterval = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1299,6 +1299,7 @@ public:
|
||||||
sec->prevsec = -1; // stair retriggering until build completes
|
sec->prevsec = -1; // stair retriggering until build completes
|
||||||
sec->heightsec = NULL; // sector used to get floor and ceiling height
|
sec->heightsec = NULL; // sector used to get floor and ceiling height
|
||||||
sec->sectornum = index;
|
sec->sectornum = index;
|
||||||
|
sec->damageinterval = 32;
|
||||||
if (floordrop) sec->Flags = SECF_FLOORDROP;
|
if (floordrop) sec->Flags = SECF_FLOORDROP;
|
||||||
// killough 3/7/98: end changes
|
// killough 3/7/98: end changes
|
||||||
|
|
||||||
|
@ -1524,6 +1525,23 @@ public:
|
||||||
cp[3] = CheckFloat(key);
|
cp[3] = CheckFloat(key);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case NAME_damageamount:
|
||||||
|
sec->damageamount = CheckInt(key);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case NAME_damagetype:
|
||||||
|
sec->damagetype = CheckString(key);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case NAME_damageinterval:
|
||||||
|
sec->damageinterval = CheckInt(key);
|
||||||
|
if (sec->damageinterval < 1) sec->damageinterval = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case NAME_leakiness:
|
||||||
|
sec->leakydamage = CheckInt(key);
|
||||||
|
break;
|
||||||
|
|
||||||
case NAME_MoreIds:
|
case NAME_MoreIds:
|
||||||
// delay parsing of the tag string until parsing of the sector is complete
|
// delay parsing of the tag string until parsing of the sector is complete
|
||||||
// This ensures that the ID is always the first tag in the list.
|
// This ensures that the ID is always the first tag in the list.
|
||||||
|
|
|
@ -2538,7 +2538,7 @@ void P_PlayerThink (player_t *player)
|
||||||
if (!(player->cheats & CF_PREDICTING))
|
if (!(player->cheats & CF_PREDICTING))
|
||||||
{
|
{
|
||||||
P_PlayerOnSpecial3DFloor (player);
|
P_PlayerOnSpecial3DFloor (player);
|
||||||
if (player->mo->Sector->special || player->mo->Sector->damage)
|
if (player->mo->Sector->special || player->mo->Sector->damageamount != 0)
|
||||||
{
|
{
|
||||||
P_PlayerInSpecialSector (player);
|
P_PlayerInSpecialSector (player);
|
||||||
}
|
}
|
||||||
|
|
|
@ -762,9 +762,11 @@ struct sector_t
|
||||||
// thinglist is a subset of touching_thinglist
|
// thinglist is a subset of touching_thinglist
|
||||||
struct msecnode_t *touching_thinglist; // phares 3/14/98
|
struct msecnode_t *touching_thinglist; // phares 3/14/98
|
||||||
|
|
||||||
float gravity; // [RH] Sector gravity (1.0 is normal)
|
float gravity; // [RH] Sector gravity (1.0 is normal)
|
||||||
short damage; // [RH] Damage to do while standing on floor
|
FNameNoInit damagetype; // [RH] Means-of-death for applied damage
|
||||||
short mod; // [RH] Means-of-death for applied damage
|
short damageamount; // [RH] Damage to do while standing on floor
|
||||||
|
short damageinterval; // Interval for damage application
|
||||||
|
short leakydamage; // chance of leaking through radiation suit
|
||||||
|
|
||||||
WORD ZoneNumber; // [RH] Zone this sector belongs to
|
WORD ZoneNumber; // [RH] Zone this sector belongs to
|
||||||
WORD MoreFlags; // [RH] Internal sector flags
|
WORD MoreFlags; // [RH] Internal sector flags
|
||||||
|
|
|
@ -76,7 +76,7 @@ const char *GetVersionString();
|
||||||
|
|
||||||
// Use 4500 as the base git save version, since it's higher than the
|
// Use 4500 as the base git save version, since it's higher than the
|
||||||
// SVN revision ever got.
|
// SVN revision ever got.
|
||||||
#define SAVEVER 4527
|
#define SAVEVER 4528
|
||||||
|
|
||||||
#define SAVEVERSTRINGIFY2(x) #x
|
#define SAVEVERSTRINGIFY2(x) #x
|
||||||
#define SAVEVERSTRINGIFY(x) SAVEVERSTRINGIFY2(x)
|
#define SAVEVERSTRINGIFY(x) SAVEVERSTRINGIFY2(x)
|
||||||
|
|
Loading…
Reference in a new issue