mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-11 15:22:16 +00:00
Merge branch 'master' of https://github.com/rheit/zdoom
This commit is contained in:
commit
6e22be89e4
13 changed files with 2011 additions and 1984 deletions
|
@ -2328,7 +2328,9 @@ void AM_drawWalls (bool allmap)
|
|||
AM_drawMline (&l, AMColors.LockedColor); // locked special
|
||||
}
|
||||
}
|
||||
else if (am_showtriggerlines && AMColors.isValid(AMColors.SpecialWallColor) && lines[i].special != 0
|
||||
else if (am_showtriggerlines && AMColors.isValid(AMColors.SpecialWallColor)
|
||||
&& LineSpecialsInfo[lines[i].special] != NULL
|
||||
&& LineSpecialsInfo[lines[i].special]->max_args >= 0
|
||||
&& lines[i].special != Door_Open
|
||||
&& lines[i].special != Door_Close
|
||||
&& lines[i].special != Door_CloseWaitOpen
|
||||
|
|
|
@ -368,8 +368,7 @@ bool FConfigFile::DeleteCurrentSection()
|
|||
LastSectionPtr = &sec->Next;
|
||||
}
|
||||
|
||||
CurrentSection->~FConfigSection();
|
||||
delete[] (char *)CurrentSection;
|
||||
delete CurrentSection;
|
||||
|
||||
CurrentSection = sec->Next;
|
||||
return CurrentSection != NULL;
|
||||
|
|
|
@ -680,6 +680,7 @@ AInventory *AInventory::CreateCopy (AActor *other)
|
|||
{
|
||||
AInventory *copy;
|
||||
|
||||
Amount = MIN(Amount, MaxAmount);
|
||||
if (GoAway ())
|
||||
{
|
||||
copy = static_cast<AInventory *>(Spawn (GetClass(), 0, 0, 0, NO_REPLACE));
|
||||
|
|
|
@ -1338,17 +1338,17 @@ void DBaseStatusBar::Draw (EHudState state)
|
|||
{
|
||||
if (Scaled)
|
||||
{
|
||||
y -= Scale (10, SCREENHEIGHT, 200);
|
||||
y -= Scale (11, SCREENHEIGHT, 200);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (SCREENWIDTH < 640)
|
||||
{
|
||||
y -= 11;
|
||||
y -= 12;
|
||||
}
|
||||
else
|
||||
{ // Get past the tops of the gargoyles' wings
|
||||
y -= 26;
|
||||
y -= 28;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -56,6 +56,7 @@
|
|||
#include "p_3dmidtex.h"
|
||||
#include "d_net.h"
|
||||
#include "d_event.h"
|
||||
#include "gstrings.h"
|
||||
#include "r_data/colormaps.h"
|
||||
|
||||
#define FUNC(a) static int a (line_t *ln, AActor *it, bool backSide, \
|
||||
|
@ -2985,13 +2986,14 @@ FUNC(LS_SendToCommunicator)
|
|||
{
|
||||
S_StopSound (CHAN_VOICE);
|
||||
S_Sound (CHAN_VOICE, name, 1, ATTN_NORM);
|
||||
if (arg2 == 0)
|
||||
|
||||
// Get the message from the LANGUAGE lump.
|
||||
FString msg;
|
||||
msg.Format("TXT_COMM%d", arg2);
|
||||
const char *str = GStrings[msg];
|
||||
if (msg != NULL)
|
||||
{
|
||||
Printf (PRINT_CHAT, "Incoming Message\n");
|
||||
}
|
||||
else if (arg2 == 1)
|
||||
{
|
||||
Printf (PRINT_CHAT, "Incoming Message from BlackBird\n");
|
||||
Printf (PRINT_CHAT, "%s\n", str);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
|
|
@ -806,12 +806,15 @@ ASkyViewpoint *sector_t::GetSkyBox(int which)
|
|||
{
|
||||
if (which == floor)
|
||||
{
|
||||
return FloorSkyBox != NULL ? FloorSkyBox : (MoreFlags & SECF_NOFLOORSKYBOX)? (ASkyViewpoint*)NULL : level.DefaultSkybox;
|
||||
if (FloorSkyBox != NULL) return FloorSkyBox;
|
||||
if (MoreFlags & SECF_NOFLOORSKYBOX) return NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
return CeilingSkyBox != NULL ? CeilingSkyBox : (MoreFlags & SECF_NOCEILINGSKYBOX)? (ASkyViewpoint*)NULL : level.DefaultSkybox;
|
||||
if (CeilingSkyBox != NULL) return CeilingSkyBox;
|
||||
if (MoreFlags & SECF_NOCEILINGSKYBOX) return NULL;
|
||||
}
|
||||
return level.DefaultSkybox;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -254,7 +254,7 @@ void R_InitTextureMapping ()
|
|||
void R_SetVisibility (float vis)
|
||||
{
|
||||
// Allow negative visibilities, just for novelty's sake
|
||||
//vis = clamp (vis, -204.7f, 204.7f);
|
||||
vis = clamp (vis, -204.7f, 204.7f); // (205 and larger do not work in 5:4 aspect ratio)
|
||||
|
||||
CurrentVisibility = vis;
|
||||
|
||||
|
|
|
@ -2375,6 +2375,16 @@ bool S_ChangeMusic (const char *musicname, int order, bool looping, bool force)
|
|||
}
|
||||
}
|
||||
|
||||
FName *aliasp = MusicAliases.CheckKey(musicname);
|
||||
if (aliasp != NULL)
|
||||
{
|
||||
if (*aliasp == NAME_None)
|
||||
{
|
||||
return true; // flagged to be ignored
|
||||
}
|
||||
musicname = aliasp->GetChars();
|
||||
}
|
||||
|
||||
if (!mus_playing.name.IsEmpty() &&
|
||||
mus_playing.handle != NULL &&
|
||||
stricmp (mus_playing.name, musicname) == 0 &&
|
||||
|
@ -2413,16 +2423,8 @@ bool S_ChangeMusic (const char *musicname, int order, bool looping, bool force)
|
|||
int length = 0;
|
||||
int device = MDEV_DEFAULT;
|
||||
MusInfo *handle = NULL;
|
||||
FName musicasname = musicname;
|
||||
|
||||
FName *aliasp = MusicAliases.CheckKey(musicasname);
|
||||
if (aliasp != NULL)
|
||||
{
|
||||
musicname = (musicasname = *aliasp).GetChars();
|
||||
if (musicasname == NAME_None) return true;
|
||||
}
|
||||
|
||||
int *devp = MidiDevices.CheckKey(musicasname);
|
||||
int *devp = MidiDevices.CheckKey(musicname);
|
||||
if (devp != NULL) device = *devp;
|
||||
|
||||
// Strip off any leading file:// component.
|
||||
|
|
|
@ -1349,7 +1349,7 @@ FISoundChannel *OpenALSoundRenderer::StartSound3D(SoundHandle sfx, SoundListener
|
|||
alSourcei(source, AL_LOOPING, (chanflags&SNDF_LOOP) ? AL_TRUE : AL_FALSE);
|
||||
|
||||
alSourcef(source, AL_MAX_GAIN, SfxVolume);
|
||||
alSourcef(source, AL_GAIN, SfxVolume);
|
||||
alSourcef(source, AL_GAIN, SfxVolume*vol);
|
||||
|
||||
if(EnvSlot)
|
||||
{
|
||||
|
|
|
@ -4884,17 +4884,19 @@ enum RadiusGiveFlags
|
|||
|
||||
DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_RadiusGive)
|
||||
{
|
||||
ACTION_PARAM_START(6);
|
||||
ACTION_PARAM_START(7);
|
||||
ACTION_PARAM_CLASS(item, 0);
|
||||
ACTION_PARAM_FIXED(distance, 1);
|
||||
ACTION_PARAM_INT(flags, 2);
|
||||
ACTION_PARAM_INT(amount, 3);
|
||||
ACTION_PARAM_CLASS(filter, 4);
|
||||
ACTION_PARAM_NAME(species, 5);
|
||||
ACTION_PARAM_FIXED(mindist, 6);
|
||||
|
||||
// We need a valid item, valid targets, and a valid range
|
||||
if (item == NULL || (flags & RGF_MASK) == 0 || !flags || distance <= 0)
|
||||
if (item == NULL || (flags & RGF_MASK) == 0 || !flags || distance <= 0 || mindist >= distance)
|
||||
{
|
||||
ACTION_SET_RESULT(false);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -4903,9 +4905,9 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_RadiusGive)
|
|||
amount = 1;
|
||||
}
|
||||
FBlockThingsIterator it(FBoundingBox(self->x, self->y, distance));
|
||||
double distsquared = double(distance) * double(distance);
|
||||
|
||||
AActor *thing;
|
||||
bool given = false;
|
||||
while ((thing = it.Next()))
|
||||
{
|
||||
//[MC] Check for a filter, species, and the related exfilter/expecies/either flag(s).
|
||||
|
@ -4950,7 +4952,8 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_RadiusGive)
|
|||
bool corpsePass = !!((flags & RGF_CORPSES) && thing->flags & MF_CORPSE);
|
||||
bool killedPass = !!((flags & RGF_KILLED) && thing->flags6 & MF6_KILLED);
|
||||
bool monsterPass = !!((flags & RGF_MONSTERS) && thing->flags3 & MF3_ISMONSTER);
|
||||
bool objectPass = !!((flags & RGF_OBJECTS) && ((thing->flags & MF_SHOOTABLE) || (thing->flags6 & MF6_VULNERABLE)));
|
||||
bool objectPass = !!((flags & RGF_OBJECTS) && (thing->player == NULL) && (!(thing->flags3 & MF3_ISMONSTER))
|
||||
&& ((thing->flags & MF_SHOOTABLE) || (thing->flags6 & MF6_VULNERABLE)));
|
||||
bool playerPass = !!((flags & RGF_PLAYERS) && (thing->player != NULL) && (thing->player->mo == thing));
|
||||
bool voodooPass = !!((flags & RGF_VOODOO) && (thing->player != NULL) && (thing->player->mo != thing));
|
||||
//Self calls priority over the rest of this.
|
||||
|
@ -4973,20 +4976,26 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_RadiusGive)
|
|||
|
||||
if (selfPass || monsterPass || corpsePass || killedPass || itemPass || objectPass || missilePass || playerPass || voodooPass)
|
||||
{
|
||||
|
||||
if (flags & RGF_CUBE)
|
||||
{ // check if inside a cube
|
||||
if (fabs((double)thing->x - self->x) > (double)distance ||
|
||||
fabs((double)thing->y - self->y) > (double)distance ||
|
||||
fabs((double)(thing->z + thing->height / 2) - (self->z + self->height / 2)) > (double)distance)
|
||||
double dx = fabs((double)(thing->x - self->x));
|
||||
double dy = fabs((double)(thing->y - self->y));
|
||||
double dz = fabs((double)(thing->z + thing->height / 2) - (self->z + self->height / 2));
|
||||
double dist = (double)distance;
|
||||
double min = (double)mindist;
|
||||
if ((dx > dist || dy > dist || dz > dist) || (min && (dx < min && dy < min && dz < min)))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else
|
||||
{ // check if inside a sphere
|
||||
double distsquared = double(distance) * double(distance);
|
||||
double minsquared = double(mindist) * double(mindist);
|
||||
TVector3<double> tpos(thing->x, thing->y, thing->z + thing->height / 2);
|
||||
TVector3<double> spos(self->x, self->y, self->z + self->height / 2);
|
||||
if ((tpos - spos).LengthSquared() > distsquared)
|
||||
if ((tpos - spos).LengthSquared() > distsquared || (minsquared && ((tpos - spos).LengthSquared() < minsquared)))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
@ -5009,10 +5018,15 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_RadiusGive)
|
|||
{
|
||||
gift->Destroy();
|
||||
}
|
||||
else
|
||||
{
|
||||
given = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
ACTION_SET_RESULT(given);
|
||||
}
|
||||
|
||||
|
||||
//==========================================================================
|
||||
|
|
|
@ -257,7 +257,7 @@ ACTOR Actor native //: Thinker
|
|||
action native A_JumpIfInTargetInventory(class<Inventory> itemtype, int amount, state label, int forward_ptr = AAPTR_DEFAULT);
|
||||
action native A_GiveToTarget(class<Inventory> itemtype, int amount = 0, int forward_ptr = AAPTR_DEFAULT);
|
||||
action native A_TakeFromTarget(class<Inventory> itemtype, int amount = 0, int flags = 0, int forward_ptr = AAPTR_DEFAULT);
|
||||
action native A_RadiusGive(class<Inventory> itemtype, int distance, int flags, int amount = 0, class<Actor> filter = "None", name species = "None");
|
||||
action native A_RadiusGive(class<Inventory> itemtype, int distance, int flags, int amount = 0, class<Actor> filter = "None", name species = "None", int mindist = 0);
|
||||
action native A_CountdownArg(int argnum, state targstate = "");
|
||||
action native A_CustomMeleeAttack(int damage = 0, sound meleesound = "", sound misssound = "", name damagetype = "none", bool bleed = true);
|
||||
action native A_CustomComboAttack(class<Actor> missiletype, float spawnheight, int damage, sound meleesound = "", name damagetype = "none", bool bleed = true);
|
||||
|
|
|
@ -44,7 +44,7 @@ ACTOR Macil1
|
|||
Death:
|
||||
LEAD E 2 A_FaceTarget
|
||||
LEAD F 2 BRIGHT A_ShootGun
|
||||
LEAD E 2 A_SentinelRefire
|
||||
LEAD E 1 A_SentinelRefire
|
||||
Loop
|
||||
Pain:
|
||||
LEAD Y 3
|
||||
|
@ -80,7 +80,7 @@ ACTOR Macil2 : Macil1
|
|||
LEAD K 3
|
||||
LEAD L 3 A_NoBlocking
|
||||
LEAD MNOPQRSTUV 3
|
||||
LEAD W 4 Bright A_SpawnItemEx("AlienSpectre4", 0, 0, 0, 0, 0, random[spectrespawn](0,255)*0.0078125, 0, SXF_NOCHECKPOSITION)
|
||||
LEAD W 3 A_SpawnItemEx("AlienSpectre4", 0, 0, 0, 0, 0, random[spectrespawn](0,255)*0.0078125, 0, SXF_NOCHECKPOSITION)
|
||||
LEAD X -1
|
||||
Stop
|
||||
}
|
||||
|
|
|
@ -1550,6 +1550,10 @@ TXT_RANDOMGOODBYE_3 = "See you later!";
|
|||
TXT_HAVEENOUGH = "You seem to have enough!";
|
||||
TXT_GOAWAY = "Go away!";
|
||||
|
||||
TXT_COMM0 = "Incoming Message";
|
||||
TXT_COMM1 = "Incoming Message from BlackBird";
|
||||
|
||||
|
||||
// Skills:
|
||||
|
||||
SKILL_BABY = "I'm too young to die";
|
||||
|
|
Loading…
Reference in a new issue