mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-23 04:22:34 +00:00
Merge branch 'master' of https://github.com/coelckers/gzdoom into lightmaps2
This commit is contained in:
commit
d35cd9549f
21 changed files with 80 additions and 86 deletions
17
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
17
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
|
@ -11,26 +11,17 @@ body:
|
|||
## Please fill out forms as cleanly as possible.
|
||||
#### Make sure that you have
|
||||
* properly edited & filled in the title of this bug report
|
||||
- type: dropdown
|
||||
- type: input
|
||||
id: version
|
||||
attributes:
|
||||
label: GZDoom version
|
||||
description: |
|
||||
What version are you using?
|
||||
Run `gzdoom --version`
|
||||
Run `gzdoom --version` or check in the console in game.
|
||||
Make sure to update to latest [release](https://github.com/coelckers/gzdoom/releases) version and test again before continuing.
|
||||
multiple: false
|
||||
options:
|
||||
- 4.6.1
|
||||
- 4.6.0
|
||||
- 4.5.0
|
||||
- 4.4.2
|
||||
- 4.4.1
|
||||
- 4.4.0
|
||||
- Git
|
||||
- Other
|
||||
placeholder: "ex: GZDoom 4.0.0, Git version, Branch, other"
|
||||
validations:
|
||||
required: true
|
||||
required: false
|
||||
- type: dropdown
|
||||
id: gameid
|
||||
attributes:
|
||||
|
|
17
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
17
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
|
@ -11,26 +11,17 @@ body:
|
|||
## Please fill out forms as cleanly as possible.
|
||||
#### Make sure that you have
|
||||
* properly edited & filled in the title of this bug report
|
||||
- type: dropdown
|
||||
- type: input
|
||||
id: version
|
||||
attributes:
|
||||
label: GZDoom version
|
||||
description: |
|
||||
What version are you using?
|
||||
Run `gzdoom --version`
|
||||
Run `gzdoom --version` or check in the console in game.
|
||||
Make sure to update to latest [release](https://github.com/coelckers/gzdoom/releases) version and test again before continuing.
|
||||
multiple: false
|
||||
options:
|
||||
- 4.6.1
|
||||
- 4.6.0
|
||||
- 4.5.0
|
||||
- 4.4.2
|
||||
- 4.4.1
|
||||
- 4.4.0
|
||||
- Git
|
||||
- Other
|
||||
placeholder: "ex: GZDoom 4.0.0, Git version, Branch, other"
|
||||
validations:
|
||||
required: true
|
||||
required: false
|
||||
- type: dropdown
|
||||
id: gameid
|
||||
attributes:
|
||||
|
|
|
@ -243,7 +243,7 @@ public:
|
|||
bool mIsFirstPass = true;
|
||||
};
|
||||
|
||||
struct DShape2DBufferInfo : NoVirtualRefCountedBase
|
||||
struct DShape2DBufferInfo : RefCountedBase
|
||||
{
|
||||
TArray<F2DVertexBuffer> buffers;
|
||||
bool needsVertexUpload = true;
|
||||
|
|
|
@ -94,6 +94,7 @@ FFont *V_GetFont(const char *name, const char *fontlumpname)
|
|||
{
|
||||
if (!stricmp(name, "DBIGFONT")) name = "BigFont";
|
||||
else if (!stricmp(name, "CONFONT")) name = "ConsoleFont"; // several mods have used the name CONFONT directly and effectively duplicated the font.
|
||||
else if (!stricmp(name, "INDEXFON")) name = "IndexFont"; // Same here - for whatever reason some people had to use its 8 character name...
|
||||
FFont *font = FFont::FindFont (name);
|
||||
if (font == nullptr)
|
||||
{
|
||||
|
@ -873,6 +874,7 @@ void V_InitFonts()
|
|||
NewSmallFont = CreateHexLumpFont2("NewSmallFont", lump);
|
||||
CurrentConsoleFont = NewConsoleFont;
|
||||
ConFont = V_GetFont("ConsoleFont", "CONFONT");
|
||||
V_GetFont("IndexFont", "INDEXFON"); // detect potential replacements for this one.
|
||||
}
|
||||
|
||||
void V_LoadTranslations()
|
||||
|
|
|
@ -910,7 +910,7 @@ static void ParseOptionSettings(FScanner &sc)
|
|||
else if (sc.Compare("Linespacing"))
|
||||
{
|
||||
sc.MustGetNumber();
|
||||
OptionSettings.mLinespacing = sc.Number;
|
||||
// ignored
|
||||
}
|
||||
else if (sc.Compare("LabelOffset"))
|
||||
{
|
||||
|
@ -1402,6 +1402,7 @@ void M_ParseMenuDefs()
|
|||
DefaultOptionMenuSettings = Create<DOptionMenuDescriptor>();
|
||||
DefaultListMenuSettings->Reset();
|
||||
DefaultOptionMenuSettings->Reset();
|
||||
OptionSettings.mLinespacing = 17;
|
||||
|
||||
int IWADMenu = fileSystem.CheckNumForName("MENUDEF", ns_global, fileSystem.GetIwadNum());
|
||||
|
||||
|
|
|
@ -229,6 +229,7 @@ DObject::DObject ()
|
|||
ObjNext = GC::Root;
|
||||
GCNext = nullptr;
|
||||
GC::Root = this;
|
||||
GC::AllocCount++;
|
||||
}
|
||||
|
||||
DObject::DObject (PClass *inClass)
|
||||
|
@ -238,6 +239,7 @@ DObject::DObject (PClass *inClass)
|
|||
ObjNext = GC::Root;
|
||||
GCNext = nullptr;
|
||||
GC::Root = this;
|
||||
GC::AllocCount++;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
|
@ -275,6 +277,7 @@ DObject::~DObject ()
|
|||
|
||||
void DObject::Release()
|
||||
{
|
||||
if (GC::AllocCount > 0) GC::AllocCount--;
|
||||
DObject **probe;
|
||||
|
||||
// Unlink this object from the GC list.
|
||||
|
|
|
@ -108,6 +108,7 @@ namespace GC
|
|||
size_t AllocBytes;
|
||||
size_t Threshold;
|
||||
size_t Estimate;
|
||||
size_t AllocCount;
|
||||
DObject *Gray;
|
||||
DObject *Root;
|
||||
DObject *SoftRoots;
|
||||
|
|
|
@ -43,6 +43,9 @@ namespace GC
|
|||
// Number of bytes currently allocated through M_Malloc/M_Realloc.
|
||||
extern size_t AllocBytes;
|
||||
|
||||
// Number of allocated objects since last CheckGC call.
|
||||
extern size_t AllocCount;
|
||||
|
||||
// Amount of memory to allocate before triggering a collection.
|
||||
extern size_t Threshold;
|
||||
|
||||
|
@ -105,10 +108,15 @@ namespace GC
|
|||
}
|
||||
|
||||
// Check if it's time to collect, and do a collection step if it is.
|
||||
static inline void CheckGC()
|
||||
static inline bool CheckGC()
|
||||
{
|
||||
AllocCount = 0;
|
||||
if (AllocBytes >= Threshold)
|
||||
{
|
||||
Step();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Forces a collection to start now.
|
||||
|
|
|
@ -294,11 +294,11 @@ void EventManager::WorldLoaded()
|
|||
}
|
||||
}
|
||||
|
||||
void EventManager::WorldUnloaded()
|
||||
void EventManager::WorldUnloaded(const FString& nextmap)
|
||||
{
|
||||
for (DStaticEventHandler* handler = LastEventHandler; handler; handler = handler->prev)
|
||||
{
|
||||
handler->WorldUnloaded();
|
||||
handler->WorldUnloaded(nextmap);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -629,6 +629,7 @@ DEFINE_FIELD_X(RenderEvent, FRenderEvent, Camera);
|
|||
|
||||
DEFINE_FIELD_X(WorldEvent, FWorldEvent, IsSaveGame);
|
||||
DEFINE_FIELD_X(WorldEvent, FWorldEvent, IsReopen);
|
||||
DEFINE_FIELD_X(WorldEvent, FWorldEvent, NextMap);
|
||||
DEFINE_FIELD_X(WorldEvent, FWorldEvent, Thing);
|
||||
DEFINE_FIELD_X(WorldEvent, FWorldEvent, Inflictor);
|
||||
DEFINE_FIELD_X(WorldEvent, FWorldEvent, Damage);
|
||||
|
@ -769,13 +770,14 @@ void DStaticEventHandler::WorldLoaded()
|
|||
}
|
||||
}
|
||||
|
||||
void DStaticEventHandler::WorldUnloaded()
|
||||
void DStaticEventHandler::WorldUnloaded(const FString& nextmap)
|
||||
{
|
||||
IFVIRTUAL(DStaticEventHandler, WorldUnloaded)
|
||||
{
|
||||
// don't create excessive DObjects if not going to be processed anyway
|
||||
if (isEmpty(func)) return;
|
||||
FWorldEvent e = owner->SetupWorldEvent();
|
||||
e.NextMap = nextmap;
|
||||
VMValue params[2] = { (DStaticEventHandler*)this, &e };
|
||||
VMCall(func, params, 2, nullptr, 0);
|
||||
}
|
||||
|
|
|
@ -78,7 +78,7 @@ public:
|
|||
|
||||
//
|
||||
void WorldLoaded();
|
||||
void WorldUnloaded();
|
||||
void WorldUnloaded(const FString& nextmap);
|
||||
void WorldThingSpawned(AActor* actor);
|
||||
void WorldThingDied(AActor* actor, AActor* inflictor);
|
||||
void WorldThingGround(AActor* actor, FState* st);
|
||||
|
@ -144,6 +144,7 @@ struct FWorldEvent
|
|||
// for loaded/unloaded
|
||||
bool IsSaveGame = false;
|
||||
bool IsReopen = false;
|
||||
FString NextMap;
|
||||
// for thingspawned, thingdied, thingdestroyed
|
||||
AActor* Thing = nullptr; // for thingdied
|
||||
AActor* Inflictor = nullptr; // can be null - for damagemobj
|
||||
|
@ -232,7 +233,7 @@ struct EventManager
|
|||
// called right after the map has loaded (approximately same time as OPEN ACS scripts)
|
||||
void WorldLoaded();
|
||||
// called when the map is about to unload (approximately same time as UNLOADING ACS scripts)
|
||||
void WorldUnloaded();
|
||||
void WorldUnloaded(const FString& nextmap);
|
||||
// called around PostBeginPlay of each actor.
|
||||
void WorldThingSpawned(AActor* actor);
|
||||
// called after AActor::Die of each actor.
|
||||
|
|
|
@ -1316,6 +1316,15 @@ void G_Ticker ()
|
|||
default:
|
||||
break;
|
||||
}
|
||||
// Do some more aggressive GC maintenance when the game ticker is inactive.
|
||||
if ((gamestate != GS_LEVEL && gamestate != GS_TITLELEVEL) || paused || P_CheckTickerPaused())
|
||||
{
|
||||
size_t ac = std::max<size_t>(10, GC::AllocCount);
|
||||
for (size_t i = 0; i < ac; i++)
|
||||
{
|
||||
if (!GC::CheckGC()) break;
|
||||
}
|
||||
}
|
||||
|
||||
// [MK] Additional ticker for UI events right after all others
|
||||
primaryLevel->localEventManager->PostUiTick();
|
||||
|
|
|
@ -468,7 +468,7 @@ void G_InitNew (const char *mapname, bool bTitleLevel)
|
|||
|
||||
// did we have any level before?
|
||||
if (primaryLevel->info != nullptr)
|
||||
staticEventManager.WorldUnloaded();
|
||||
staticEventManager.WorldUnloaded(FString()); // [MK] don't pass the new map, as it's not a level transition
|
||||
|
||||
if (!savegamerestore)
|
||||
{
|
||||
|
@ -701,10 +701,10 @@ void FLevelLocals::ChangeLevel(const char *levelname, int position, int inflags,
|
|||
for (auto Level : AllLevels())
|
||||
{
|
||||
// Todo: This must be exolicitly sandboxed!
|
||||
Level->localEventManager->WorldUnloaded();
|
||||
Level->localEventManager->WorldUnloaded(nextlevel);
|
||||
}
|
||||
// [ZZ] unsafe world unload (changemap != map)
|
||||
staticEventManager.WorldUnloaded();
|
||||
staticEventManager.WorldUnloaded(nextlevel);
|
||||
unloading = false;
|
||||
|
||||
STAT_ChangeLevel(nextlevel, this);
|
||||
|
|
|
@ -764,22 +764,6 @@ static void CreateLineEffectFunc(FunctionCallEmitter &emitters, int value1, int
|
|||
emitters.AddParameterIntConst(value2); // tag
|
||||
}
|
||||
|
||||
// No misc, but it's basically A_Explode with an added effect
|
||||
static void CreateNailBombFunc(FunctionCallEmitter &emitters, int value1, int value2, MBFParamState* state)
|
||||
{ // A_Explode
|
||||
// This one does not actually have MBF-style parameters. But since
|
||||
// we're aliasing it to an extension of A_Explode...
|
||||
emitters.AddParameterIntConst(-1); // damage
|
||||
emitters.AddParameterIntConst(-1); // distance
|
||||
emitters.AddParameterIntConst(1); // flags (1=XF_HURTSOURCE)
|
||||
emitters.AddParameterIntConst(0); // alert
|
||||
emitters.AddParameterIntConst(0); // fulldamagedistance
|
||||
emitters.AddParameterIntConst(30); // nails
|
||||
emitters.AddParameterIntConst(10); // naildamage
|
||||
emitters.AddParameterPointerConst(PClass::FindClass(NAME_BulletPuff)); // itemtype
|
||||
emitters.AddParameterIntConst(NAME_None); // damage type
|
||||
}
|
||||
|
||||
static void CreateSpawnObjectFunc(FunctionCallEmitter& emitters, int value1, int value2, MBFParamState* state)
|
||||
{
|
||||
state->ValidateArgCount(8, "A_SpawnObject");
|
||||
|
@ -936,7 +920,6 @@ static void (*MBFCodePointerFactories[])(FunctionCallEmitter&, int, int, MBFPara
|
|||
{
|
||||
// Die and Detonate are not in this list because these codepointers have
|
||||
// no dehacked arguments and therefore do not need special handling.
|
||||
// NailBomb has no argument but is implemented as new parameters for A_Explode.
|
||||
CreateMushroomFunc,
|
||||
CreateSpawnFunc,
|
||||
CreateTurnFunc,
|
||||
|
@ -945,7 +928,6 @@ static void (*MBFCodePointerFactories[])(FunctionCallEmitter&, int, int, MBFPara
|
|||
CreatePlaySoundFunc,
|
||||
CreateRandomJumpFunc,
|
||||
CreateLineEffectFunc,
|
||||
CreateNailBombFunc,
|
||||
CreateSpawnObjectFunc,
|
||||
CreateMonsterProjectileFunc,
|
||||
CreateMonsterBulletAttackFunc,
|
||||
|
|
|
@ -109,21 +109,22 @@ static inline bool P_IsThingSpecial(int specnum)
|
|||
return (specnum >= Thing_Projectile && specnum <= Thing_SpawnNoFog) ||
|
||||
specnum == Thing_SpawnFacing || specnum == Thing_ProjectileIntercept || specnum == Thing_ProjectileAimed;
|
||||
}
|
||||
|
||||
enum
|
||||
namespace
|
||||
{
|
||||
Dm=1,
|
||||
Ht=2,
|
||||
Hx=4,
|
||||
St=8,
|
||||
Zd=16,
|
||||
Zdt=32,
|
||||
Va=64,
|
||||
|
||||
// will be extended later. Unknown namespaces will always be treated like the base
|
||||
// namespace for each game
|
||||
};
|
||||
enum
|
||||
{
|
||||
Dm=1, // Doom
|
||||
Ht=2, // Heretic
|
||||
Hx=4, // Hexen
|
||||
St=8, // Strife
|
||||
Zd=16, // ZDoom
|
||||
Zdt=32, // ZDoom Translated
|
||||
Va=64, // Vavoom
|
||||
|
||||
// will be extended later. Unknown namespaces will always be treated like the base
|
||||
// namespace for each game
|
||||
};
|
||||
}
|
||||
#define CHECK_N(f) if (!(namespace_bits&(f))) break;
|
||||
|
||||
//===========================================================================
|
||||
|
|
|
@ -584,7 +584,7 @@ bool AActor::SetState (FState *newstate, bool nofunction)
|
|||
newstate = newstate->GetNextState();
|
||||
} while (tics == 0);
|
||||
|
||||
if (GetInfo()->LightAssociations.Size() || (newstate && newstate->Light > 0))
|
||||
if (GetInfo()->LightAssociations.Size() || (state && state->Light > 0))
|
||||
{
|
||||
flags8 |= MF8_RECREATELIGHTS;
|
||||
Level->flags3 |= LEVEL3_LIGHTCREATED;
|
||||
|
|
|
@ -1193,12 +1193,11 @@ Aliases
|
|||
A_PlaySound, A_PlaySound,
|
||||
A_RandomJump, A_Jump,
|
||||
A_LineEffect, A_LineEffect,
|
||||
A_NailBomb, A_Explode,
|
||||
A_SpawnObject, MBF21_SpawnObject,
|
||||
A_MonsterProjectile, MBF21_MonsterProjectile,
|
||||
A_MonsterBulletAttack, MBF21_MonsterBulletAttack,
|
||||
A_MonsterMeleeAttack, MBF21_MonsterMeleeAttack,
|
||||
A_RadiusDamage, A_Explode,
|
||||
A_RadiusDamage, A_RadiusDamage,
|
||||
A_HealChase, MBF21_HealChase,
|
||||
A_SeekTracer, A_SeekerMissile,
|
||||
A_FindTracer, A_FindTracer,
|
||||
|
|
|
@ -344,18 +344,6 @@ OptionValue AutoOffOn
|
|||
1, "$OPTVAL_ON"
|
||||
}
|
||||
|
||||
OptionMenuSettings
|
||||
{
|
||||
// These can be overridden if a different menu fonts requires it.
|
||||
Linespacing 17
|
||||
/*
|
||||
IfGame(Heretic, Hexen)
|
||||
{
|
||||
Linespacing 9
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
DefaultOptionMenu
|
||||
{
|
||||
Position -15
|
||||
|
|
|
@ -616,6 +616,18 @@ extend class Actor
|
|||
return count;
|
||||
}
|
||||
|
||||
deprecated("2.3", "For Dehacked use only")
|
||||
void A_NailBomb()
|
||||
{
|
||||
A_Explode(nails:30);
|
||||
}
|
||||
|
||||
deprecated("2.3", "For Dehacked use only")
|
||||
void A_RadiusDamage(int dam, int dist)
|
||||
{
|
||||
A_Explode(dam, dist);
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// A_RadiusThrust
|
||||
|
|
|
@ -66,9 +66,10 @@ extend class Actor
|
|||
damage *= 10;
|
||||
|
||||
double ang = angle + Random2[Punch]() * (5.625 / 256);
|
||||
double pitch = AimLineAttack (ang, MeleeRange + MELEEDELTA, null, 0., ALF_CHECK3D);
|
||||
double range = MeleeRange + MELEEDELTA;
|
||||
double pitch = AimLineAttack (ang, range, null, 0., ALF_CHECK3D);
|
||||
|
||||
LineAttack (ang, MeleeRange, pitch, damage, 'Melee', "BulletPuff", LAF_ISMELEEATTACK, t);
|
||||
LineAttack (ang, range, pitch, damage, 'Melee', "BulletPuff", LAF_ISMELEEATTACK, t);
|
||||
|
||||
// turn to face target
|
||||
if (t.linetarget)
|
||||
|
|
|
@ -2084,7 +2084,7 @@ class PlayerPawn : Actor
|
|||
me.GiveDefaultInventory();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
// FWeaponSlot :: PickWeapon
|
||||
|
|
|
@ -15,6 +15,8 @@ struct WorldEvent native play version("2.4")
|
|||
native readonly bool IsSaveGame;
|
||||
// this will be true if we are re-entering the hub level.
|
||||
native readonly bool IsReopen;
|
||||
// for unloaded, name of next map (if any)
|
||||
native readonly String NextMap;
|
||||
// for thingspawned/thingdied/thingdestroyed/thingground
|
||||
native readonly Actor Thing;
|
||||
// for thingdied. can be null
|
||||
|
|
Loading…
Reference in a new issue