- roughly 50 more, mostly search and replace.

This commit is contained in:
Christoph Oelckers 2019-01-27 19:16:14 +01:00
parent 06ba8c4c00
commit b4a95ccaa9
12 changed files with 74 additions and 65 deletions

View file

@ -1023,11 +1023,6 @@ void G_DoLoadLevel (int position, bool autosave, bool newGame)
P_SetupLevel (&level, position, newGame); P_SetupLevel (&level, position, newGame);
// [RH] Start lightning, if MAPINFO tells us to
if (level.flags & LEVEL_STARTLIGHTNING)
{
P_StartLightning ();
}
gameaction = ga_nothing; gameaction = ga_nothing;

View file

@ -207,6 +207,8 @@ public:
AActor *SpawnMapThing(FMapThing *mthing, int position); AActor *SpawnMapThing(FMapThing *mthing, int position);
AActor *SpawnMapThing(int index, FMapThing *mt, int position); AActor *SpawnMapThing(int index, FMapThing *mt, int position);
AActor *SpawnPlayer(FPlayerStart *mthing, int playernum, int flags); AActor *SpawnPlayer(FPlayerStart *mthing, int playernum, int flags);
void StartLightning();
void ForceLightning(int mode);
bool EV_DoPlat(int tag, line_t *line, DPlat::EPlatType type, double height, double speed, int delay, int lip, int change); bool EV_DoPlat(int tag, line_t *line, DPlat::EPlatType type, double height, double speed, int delay, int lip, int change);
void EV_StopPlat(int tag, bool remove); void EV_StopPlat(int tag, bool remove);

View file

@ -111,7 +111,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_QueueCorpse)
if (sv_corpsequeuesize > 0) if (sv_corpsequeuesize > 0)
{ {
auto &corpsequeue = level.CorpseQueue; auto &corpsequeue = self->Level->CorpseQueue;
while (corpsequeue.Size() >= (unsigned)sv_corpsequeuesize) while (corpsequeue.Size() >= (unsigned)sv_corpsequeuesize)
{ {
AActor *corpse = corpsequeue[0]; AActor *corpse = corpsequeue[0];
@ -128,7 +128,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_DeQueueCorpse)
{ {
PARAM_SELF_PROLOGUE(AActor); PARAM_SELF_PROLOGUE(AActor);
auto &corpsequeue = level.CorpseQueue; auto &corpsequeue = self->Level->CorpseQueue;
auto index = corpsequeue.FindEx([=](auto &element) { return element == self; }); auto index = corpsequeue.FindEx([=](auto &element) { return element == self; });
if (index < corpsequeue.Size()) if (index < corpsequeue.Size())
{ {

View file

@ -100,7 +100,7 @@ DEFINE_CLASS_PROPERTY(type, S, DynamicLight)
// //
//========================================================================== //==========================================================================
static FDynamicLight *GetLight() static FDynamicLight *GetLight(FLevelLocals *Level)
{ {
FDynamicLight *ret; FDynamicLight *ret;
if (FreeList.Size()) if (FreeList.Size())
@ -109,11 +109,12 @@ static FDynamicLight *GetLight()
} }
else ret = (FDynamicLight*)DynLightArena.Alloc(sizeof(FDynamicLight)); else ret = (FDynamicLight*)DynLightArena.Alloc(sizeof(FDynamicLight));
memset(ret, 0, sizeof(*ret)); memset(ret, 0, sizeof(*ret));
ret->next = level.lights; ret->next = Level->lights;
level.lights = ret; Level->lights = ret;
if (ret->next) ret->next->prev = ret; if (ret->next) ret->next->prev = ret;
ret->visibletoplayer = true; ret->visibletoplayer = true;
ret->mShadowmapIndex = 1024; ret->mShadowmapIndex = 1024;
ret->Level = Level;
ret->Pos.X = -10000000; // not a valid coordinate. ret->Pos.X = -10000000; // not a valid coordinate.
return ret; return ret;
} }
@ -128,7 +129,7 @@ static FDynamicLight *GetLight()
void AttachLight(AActor *self) void AttachLight(AActor *self)
{ {
auto light = GetLight(); auto light = GetLight(self->Level);
light->pSpotInnerAngle = &self->AngleVar(NAME_SpotInnerAngle); light->pSpotInnerAngle = &self->AngleVar(NAME_SpotInnerAngle);
light->pSpotOuterAngle = &self->AngleVar(NAME_SpotOuterAngle); light->pSpotOuterAngle = &self->AngleVar(NAME_SpotOuterAngle);
@ -221,9 +222,9 @@ DEFINE_ACTION_FUNCTION_NATIVE(ADynamicLight, SetOffset, SetOffset)
void FDynamicLight::ReleaseLight() void FDynamicLight::ReleaseLight()
{ {
assert(prev != nullptr || this == level.lights); assert(prev != nullptr || this == Level->lights);
if (prev != nullptr) prev->next = next; if (prev != nullptr) prev->next = next;
else level.lights = next; else Level->lights = next;
if (next != nullptr) next->prev = prev; if (next != nullptr) next->prev = prev;
next = prev = nullptr; next = prev = nullptr;
FreeList.Push(this); FreeList.Push(this);
@ -245,7 +246,7 @@ void FDynamicLight::Activate()
{ {
float pulseTime = float(specialf1 / TICRATE); float pulseTime = float(specialf1 / TICRATE);
m_lastUpdate = level.maptime; m_lastUpdate = Level->maptime;
if (!swapped) m_cycler.SetParams(float(GetSecondaryIntensity()), float(GetIntensity()), pulseTime); if (!swapped) m_cycler.SetParams(float(GetSecondaryIntensity()), float(GetIntensity()), pulseTime);
else m_cycler.SetParams(float(GetIntensity()), float(GetSecondaryIntensity()), pulseTime); else m_cycler.SetParams(float(GetIntensity()), float(GetSecondaryIntensity()), pulseTime);
m_cycler.ShouldCycle(true); m_cycler.ShouldCycle(true);
@ -294,9 +295,9 @@ void FDynamicLight::Tick()
{ {
case PulseLight: case PulseLight:
{ {
float diff = (level.maptime - m_lastUpdate) / (float)TICRATE; float diff = (Level->maptime - m_lastUpdate) / (float)TICRATE;
m_lastUpdate = level.maptime; m_lastUpdate = Level->maptime;
m_cycler.Update(diff); m_cycler.Update(diff);
m_currentRadius = float(m_cycler.GetVal()); m_currentRadius = float(m_cycler.GetVal());
break; break;
@ -760,7 +761,7 @@ void AActor::AttachLight(unsigned int count, const FLightDefaults *lightdef)
} }
else else
{ {
light = GetLight(); light = GetLight(Level);
light->SetActor(this, true); light->SetActor(this, true);
AttachedLights.Push(light); AttachedLights.Push(light);
} }

View file

@ -233,6 +233,7 @@ public:
double specialf1; double specialf1;
FDynamicLight *next, *prev; FDynamicLight *next, *prev;
sector_t *Sector; sector_t *Sector;
FLevelLocals *Level;
TObjPtr<AActor *> target; TObjPtr<AActor *> target;
FLightNode * touching_sides; FLightNode * touching_sides;
FLightNode * touching_sector; FLightNode * touching_sector;

View file

@ -47,7 +47,7 @@ void DLightningThinker::Construct()
LightningFlashCount = 0; LightningFlashCount = 0;
NextLightningFlash = ((pr_lightning()&15)+5)*35; // don't flash at level start NextLightningFlash = ((pr_lightning()&15)+5)*35; // don't flash at level start
LightningLightLevels.Resize(level.sectors.Size()); LightningLightLevels.Resize(Level->sectors.Size());
fillshort(&LightningLightLevels[0], LightningLightLevels.Size(), SHRT_MAX); fillshort(&LightningLightLevels[0], LightningLightLevels.Size(), SHRT_MAX);
} }
@ -88,8 +88,8 @@ void DLightningThinker::LightningFlash ()
LightningFlashCount--; LightningFlashCount--;
if (LightningFlashCount) if (LightningFlashCount)
{ // reduce the brightness of the flash { // reduce the brightness of the flash
tempSec = &level.sectors[0]; tempSec = &Level->sectors[0];
for (i = level.sectors.Size(), j = 0; i > 0; ++j, --i, ++tempSec) for (i = Level->sectors.Size(), j = 0; i > 0; ++j, --i, ++tempSec)
{ {
// [RH] Checking this sector's applicability to lightning now // [RH] Checking this sector's applicability to lightning now
// is not enough to know if we should lower its light level, // is not enough to know if we should lower its light level,
@ -104,24 +104,24 @@ void DLightningThinker::LightningFlash ()
} }
else else
{ // remove the alternate lightning flash special { // remove the alternate lightning flash special
tempSec = &level.sectors[0]; tempSec = &Level->sectors[0];
for (i = level.sectors.Size(), j = 0; i > 0; ++j, --i, ++tempSec) for (i = Level->sectors.Size(), j = 0; i > 0; ++j, --i, ++tempSec)
{ {
if (LightningLightLevels[j] != SHRT_MAX) if (LightningLightLevels[j] != SHRT_MAX)
{ {
tempSec->SetLightLevel(LightningLightLevels[j]); tempSec->SetLightLevel(LightningLightLevels[j]);
} }
} }
fillshort(&LightningLightLevels[0], level.sectors.Size(), SHRT_MAX); fillshort(&LightningLightLevels[0], Level->sectors.Size(), SHRT_MAX);
level.flags &= ~LEVEL_SWAPSKIES; Level->flags &= ~LEVEL_SWAPSKIES;
} }
return; return;
} }
LightningFlashCount = (pr_lightning()&7)+8; LightningFlashCount = (pr_lightning()&7)+8;
flashLight = 200+(pr_lightning()&31); flashLight = 200+(pr_lightning()&31);
tempSec = &level.sectors[0]; tempSec = &Level->sectors[0];
for (i = level.sectors.Size(), j = 0; i > 0; ++j, --i, ++tempSec) for (i = Level->sectors.Size(), j = 0; i > 0; ++j, --i, ++tempSec)
{ {
// allow combination of the lightning sector specials with bit masks // allow combination of the lightning sector specials with bit masks
int special = tempSec->special; int special = tempSec->special;
@ -151,12 +151,12 @@ void DLightningThinker::LightningFlash ()
} }
} }
level.flags |= LEVEL_SWAPSKIES; // set alternate sky Level->flags |= LEVEL_SWAPSKIES; // set alternate sky
S_Sound (CHAN_AUTO, "world/thunder", 1.0, ATTN_NONE); S_Sound (CHAN_AUTO, "world/thunder", 1.0, ATTN_NONE);
// [ZZ] just in case // [ZZ] just in case
E_WorldLightning(); E_WorldLightning();
// start LIGHTNING scripts // start LIGHTNING scripts
level.Behaviors.StartTypedScripts (SCRIPT_Lightning, NULL, false); // [RH] Run lightning scripts Level->Behaviors.StartTypedScripts (SCRIPT_Lightning, NULL, false); // [RH] Run lightning scripts
// Calculate the next lighting flash // Calculate the next lighting flash
if (!NextLightningFlash) if (!NextLightningFlash)
@ -167,7 +167,7 @@ void DLightningThinker::LightningFlash ()
} }
else else
{ {
if (pr_lightning() < 128 && !(level.time&32)) if (pr_lightning() < 128 && !(Level->time&32))
{ {
NextLightningFlash = ((pr_lightning()&7)+2)*35; NextLightningFlash = ((pr_lightning()&7)+2)*35;
} }
@ -202,16 +202,16 @@ static DLightningThinker *LocateLightning ()
return iterator.Next (); return iterator.Next ();
} }
void P_StartLightning () void FLevelLocals::StartLightning ()
{ {
const bool isOriginalHexen = (gameinfo.gametype == GAME_Hexen) const bool isOriginalHexen = (gameinfo.gametype == GAME_Hexen)
&& (level.flags2 & LEVEL2_HEXENHACK); && (flags2 & LEVEL2_HEXENHACK);
if (isOriginalHexen) if (isOriginalHexen)
{ {
bool hasLightning = false; bool hasLightning = false;
for (const sector_t &sector : level.sectors) for (const sector_t &sector : sectors)
{ {
hasLightning = sector.GetTexture(sector_t::ceiling) == skyflatnum hasLightning = sector.GetTexture(sector_t::ceiling) == skyflatnum
|| sector.special == Light_IndoorLightning1 || sector.special == Light_IndoorLightning1
@ -225,7 +225,7 @@ void P_StartLightning ()
if (!hasLightning) if (!hasLightning)
{ {
level.flags &= ~LEVEL_STARTLIGHTNING; flags &= ~LEVEL_STARTLIGHTNING;
return; return;
} }
} }
@ -233,16 +233,16 @@ void P_StartLightning ()
DLightningThinker *lightning = LocateLightning (); DLightningThinker *lightning = LocateLightning ();
if (lightning == nullptr) if (lightning == nullptr)
{ {
level.CreateThinker<DLightningThinker>(); CreateThinker<DLightningThinker>();
} }
} }
void P_ForceLightning (int mode) void FLevelLocals::ForceLightning (int mode)
{ {
DLightningThinker *lightning = LocateLightning (); DLightningThinker *lightning = LocateLightning ();
if (lightning == nullptr) if (lightning == nullptr)
{ {
lightning = level.CreateThinker<DLightningThinker>(); lightning = CreateThinker<DLightningThinker>();
} }
if (lightning != nullptr) if (lightning != nullptr)
{ {

View file

@ -28,7 +28,5 @@ protected:
TArray<short> LightningLightLevels; TArray<short> LightningLightLevels;
}; };
void P_StartLightning ();
void P_ForceLightning (int mode);
#endif //__A_LIGHTNING_H__ #endif //__A_LIGHTNING_H__

View file

@ -2069,7 +2069,7 @@ FUNC(LS_Elevator_LowerToNearest)
FUNC(LS_Light_ForceLightning) FUNC(LS_Light_ForceLightning)
// Light_ForceLightning (mode) // Light_ForceLightning (mode)
{ {
P_ForceLightning (arg0); Level->ForceLightning (arg0);
return true; return true;
} }

View file

@ -413,7 +413,7 @@ bool P_TeleportMove(AActor* thing, const DVector3 &pos, bool telefrag, bool modi
spechit.Clear(); // this is needed so that no more specials get activated after crossing a teleporter. spechit.Clear(); // this is needed so that no more specials get activated after crossing a teleporter.
bool StompAlwaysFrags = ((thing->flags2 & MF2_TELESTOMP) || (level.flags & LEVEL_MONSTERSTELEFRAG) || telefrag) && !(thing->flags7 & MF7_NOTELESTOMP); bool StompAlwaysFrags = ((thing->flags2 & MF2_TELESTOMP) || (thing->Level->flags & LEVEL_MONSTERSTELEFRAG) || telefrag) && !(thing->flags7 & MF7_NOTELESTOMP);
// P_LineOpening requires the thing's z to be the destination z in order to work. // P_LineOpening requires the thing's z to be the destination z in order to work.
double savedz = thing->Z(); double savedz = thing->Z();
@ -975,7 +975,7 @@ bool PIT_CheckLine(FMultiBlockLinesIterator &mit, FMultiBlockLinesIterator::Chec
// better than Strife's handling of rails, which lets you jump into rails // better than Strife's handling of rails, which lets you jump into rails
// from either side. How long until somebody reports this as a bug and I'm // from either side. How long until somebody reports this as a bug and I'm
// forced to say, "It's not a bug. It's a feature?" Ugh. // forced to say, "It's not a bug. It's a feature?" Ugh.
(!(level.flags2 & LEVEL2_RAILINGHACK) || (!(tm.thing->Level->flags2 & LEVEL2_RAILINGHACK) ||
open.bottom == tm.thing->Sector->floorplane.ZatPoint(ref))) open.bottom == tm.thing->Sector->floorplane.ZatPoint(ref)))
{ {
open.bottom += 32; open.bottom += 32;
@ -1365,10 +1365,10 @@ bool PIT_CheckThing(FMultiBlockThingsIterator &it, FMultiBlockThingsIterator::Ch
if ((thing->flags6 & MF6_BUMPSPECIAL) && ((tm.thing->player != NULL) if ((thing->flags6 & MF6_BUMPSPECIAL) && ((tm.thing->player != NULL)
|| ((thing->activationtype & THINGSPEC_MonsterTrigger) && (tm.thing->flags3 & MF3_ISMONSTER)) || ((thing->activationtype & THINGSPEC_MonsterTrigger) && (tm.thing->flags3 & MF3_ISMONSTER))
|| ((thing->activationtype & THINGSPEC_MissileTrigger) && (tm.thing->flags & MF_MISSILE)) || ((thing->activationtype & THINGSPEC_MissileTrigger) && (tm.thing->flags & MF_MISSILE))
) && (level.maptime > thing->lastbump)) // Leave the bumper enough time to go away ) && (thing->Level->maptime > thing->lastbump)) // Leave the bumper enough time to go away
{ {
if (P_ActivateThingSpecial(thing, tm.thing)) if (P_ActivateThingSpecial(thing, tm.thing))
thing->lastbump = level.maptime + TICRATE; thing->lastbump = thing->Level->maptime + TICRATE;
} }
} }
@ -2041,7 +2041,7 @@ void P_FakeZMovement(AActor *mo)
} }
if (mo->player && mo->flags&MF_NOGRAVITY && (mo->Z() > mo->floorz) && !mo->IsNoClip2()) if (mo->player && mo->flags&MF_NOGRAVITY && (mo->Z() > mo->floorz) && !mo->IsNoClip2())
{ {
mo->AddZ(DAngle(4.5 * level.maptime).Sin()); mo->AddZ(DAngle(4.5 * mo->Level->maptime).Sin());
} }
// //
@ -2111,7 +2111,7 @@ static void CheckForPushSpecial(line_t *line, int side, AActor *mobj, DVector2 *
} }
else if (mobj->flags2 & MF2_IMPACT) else if (mobj->flags2 & MF2_IMPACT)
{ {
if ((level.flags2 & LEVEL2_MISSILESACTIVATEIMPACT) || if ((mobj->Level->flags2 & LEVEL2_MISSILESACTIVATEIMPACT) ||
!(mobj->flags & MF_MISSILE) || !(mobj->flags & MF_MISSILE) ||
(mobj->target == NULL)) (mobj->target == NULL))
{ {
@ -4269,7 +4269,7 @@ DAngle P_AimLineAttack(AActor *t1, DAngle angle, double distance, FTranslatedLin
// can't shoot outside view angles // can't shoot outside view angles
if (vrange == 0) if (vrange == 0)
{ {
if (t1->player == NULL || !level.IsFreelookAllowed()) if (t1->player == NULL || !t1->Level->IsFreelookAllowed())
{ {
vrange = 35.; vrange = 35.;
} }
@ -4539,7 +4539,7 @@ AActor *P_LineAttack(AActor *t1, DAngle angle, double distance,
// position a bit closer for puffs // position a bit closer for puffs
if (nointeract || trace.HitType != TRACE_HitWall || ((trace.Line->special != Line_Horizon) || spawnSky)) if (nointeract || trace.HitType != TRACE_HitWall || ((trace.Line->special != Line_Horizon) || spawnSky))
{ {
DVector2 pos = level.GetPortalOffsetPosition(trace.HitPos.X, trace.HitPos.Y, -trace.HitVector.X * 4, -trace.HitVector.Y * 4); DVector2 pos = t1->Level->GetPortalOffsetPosition(trace.HitPos.X, trace.HitPos.Y, -trace.HitVector.X * 4, -trace.HitVector.Y * 4);
puff = P_SpawnPuff(t1, pufftype, DVector3(pos, trace.HitPos.Z - trace.HitVector.Z * 4), trace.SrcAngleFromTarget, puff = P_SpawnPuff(t1, pufftype, DVector3(pos, trace.HitPos.Z - trace.HitVector.Z * 4), trace.SrcAngleFromTarget,
trace.SrcAngleFromTarget - 90, 0, puffFlags); trace.SrcAngleFromTarget - 90, 0, puffFlags);
puff->radius = 1/65536.; puff->radius = 1/65536.;
@ -4590,7 +4590,7 @@ AActor *P_LineAttack(AActor *t1, DAngle angle, double distance,
// position a bit closer for puffs/blood if using compatibility mode. // position a bit closer for puffs/blood if using compatibility mode.
if (i_compatflags & COMPATF_HITSCAN) if (i_compatflags & COMPATF_HITSCAN)
{ {
DVector2 ofs = level.GetPortalOffsetPosition(bleedpos.X, bleedpos.Y, -10 * trace.HitVector.X, -10 * trace.HitVector.Y); DVector2 ofs = t1->Level->GetPortalOffsetPosition(bleedpos.X, bleedpos.Y, -10 * trace.HitVector.X, -10 * trace.HitVector.Y);
bleedpos.X = ofs.X; bleedpos.X = ofs.X;
bleedpos.Y = ofs.Y; bleedpos.Y = ofs.Y;
bleedpos.Z -= -10 * trace.HitVector.Z; bleedpos.Z -= -10 * trace.HitVector.Z;
@ -5101,7 +5101,7 @@ static ETraceStatus ProcessRailHit(FTraceResults &res, void *userdata)
newhit.HitAngle = res.SrcAngleFromTarget; newhit.HitAngle = res.SrcAngleFromTarget;
if (i_compatflags & COMPATF_HITSCAN) if (i_compatflags & COMPATF_HITSCAN)
{ {
DVector2 ofs = level.GetPortalOffsetPosition(newhit.HitPos.X, newhit.HitPos.Y, -10 * res.HitVector.X, -10 * res.HitVector.Y); DVector2 ofs = res.Actor->Level->GetPortalOffsetPosition(newhit.HitPos.X, newhit.HitPos.Y, -10 * res.HitVector.X, -10 * res.HitVector.Y);
newhit.HitPos.X = ofs.X; newhit.HitPos.X = ofs.X;
newhit.HitPos.Y = ofs.Y; newhit.HitPos.Y = ofs.Y;
newhit.HitPos.Z -= -10 * res.HitVector.Z; newhit.HitPos.Z -= -10 * res.HitVector.Z;
@ -6167,7 +6167,7 @@ void P_DoCrunch(AActor *thing, FChangePosition *cpos)
if (!(thing && thing->CallGrind(true) && cpos)) return; if (!(thing && thing->CallGrind(true) && cpos)) return;
cpos->nofit = true; cpos->nofit = true;
if ((cpos->crushchange > 0) && !(level.maptime & 3)) if ((cpos->crushchange > 0) && !(thing->Level->maptime & 3))
{ {
int newdam = P_DamageMobj(thing, NULL, NULL, cpos->crushchange, NAME_Crush); int newdam = P_DamageMobj(thing, NULL, NULL, cpos->crushchange, NAME_Crush);
@ -6829,14 +6829,14 @@ bool P_ActivateThingSpecial(AActor * thing, AActor * trigger, bool death)
{ {
res = !!P_ExecuteSpecial(thing->special, NULL, res = !!P_ExecuteSpecial(thing->special, NULL,
// TriggerActs overrides the level flag, which only concerns thing activated by death // TriggerActs overrides the level flag, which only concerns thing activated by death
(((death && level.flags & LEVEL_ACTOWNSPECIAL && !(thing->activationtype & THINGSPEC_TriggerActs)) (((death && thing->Level->flags & LEVEL_ACTOWNSPECIAL && !(thing->activationtype & THINGSPEC_TriggerActs))
|| (thing->activationtype & THINGSPEC_ThingActs)) // Who triggers? || (thing->activationtype & THINGSPEC_ThingActs)) // Who triggers?
? thing : trigger), ? thing : trigger),
false, thing->args[0], thing->args[1], thing->args[2], thing->args[3], thing->args[4]); false, thing->args[0], thing->args[1], thing->args[2], thing->args[3], thing->args[4]);
// Clears the special if it was run on thing's death or if flag is set. // Clears the special if it was run on thing's death or if flag is set.
// Note that Hexen originally did not clear the special which some original maps depend on (e.g. the bell in HEXDD.) // Note that Hexen originally did not clear the special which some original maps depend on (e.g. the bell in HEXDD.)
if ((death && !(level.flags2 & LEVEL2_HEXENHACK)) || (thing->activationtype & THINGSPEC_ClearSpecial && res)) thing->special = 0; if ((death && !(thing->Level->flags2 & LEVEL2_HEXENHACK)) || (thing->activationtype & THINGSPEC_ClearSpecial && res)) thing->special = 0;
} }
// Returns the result // Returns the result

View file

@ -551,6 +551,13 @@ void P_SetupLevel(FLevelLocals *Level, int position, bool newGame)
Level->automap = AM_Create(Level); Level->automap = AM_Create(Level);
Level->automap->LevelInit(); Level->automap->LevelInit();
// [RH] Start lightning, if MAPINFO tells us to
if (Level->flags & LEVEL_STARTLIGHTNING)
{
Level->StartLightning();
}
} }
// //

View file

@ -148,6 +148,7 @@ bool ModActorFlag(AActor *actor, const FString &flagname, bool set, bool printer
if (actor != NULL) if (actor != NULL)
{ {
auto Level = actor->Level;
const char *dot = strchr(flagname, '.'); const char *dot = strchr(flagname, '.');
FFlagDef *fd; FFlagDef *fd;
PClassActor *cls = actor->GetClass(); PClassActor *cls = actor->GetClass();
@ -166,9 +167,9 @@ bool ModActorFlag(AActor *actor, const FString &flagname, bool set, bool printer
{ {
found = true; found = true;
if (actor->CountsAsKill() && actor->health > 0) --level.total_monsters; if (actor->CountsAsKill() && actor->health > 0) --Level->total_monsters;
if (actor->flags & MF_COUNTITEM) --level.total_items; if (actor->flags & MF_COUNTITEM) --Level->total_items;
if (actor->flags5 & MF5_COUNTSECRET) --level.total_secrets; if (actor->flags5 & MF5_COUNTSECRET) --Level->total_secrets;
if (fd->structoffset == -1) if (fd->structoffset == -1)
{ {
@ -187,9 +188,9 @@ bool ModActorFlag(AActor *actor, const FString &flagname, bool set, bool printer
if (linkchange) actor->LinkToWorld(&ctx); if (linkchange) actor->LinkToWorld(&ctx);
} }
if (actor->CountsAsKill() && actor->health > 0) ++level.total_monsters; if (actor->CountsAsKill() && actor->health > 0) ++Level->total_monsters;
if (actor->flags & MF_COUNTITEM) ++level.total_items; if (actor->flags & MF_COUNTITEM) ++Level->total_items;
if (actor->flags5 & MF5_COUNTSECRET) ++level.total_secrets; if (actor->flags5 & MF5_COUNTSECRET) ++Level->total_secrets;
} }
else if (printerror) else if (printerror)
{ {

View file

@ -1166,7 +1166,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(_Sector, RemoveForceField, RemoveForceField)
static void SetEnvironmentID(sector_t *self, int envnum) static void SetEnvironmentID(sector_t *self, int envnum)
{ {
level.Zones[self->ZoneNumber].Environment = S_FindEnvironment(envnum); self->Level->Zones[self->ZoneNumber].Environment = S_FindEnvironment(envnum);
} }
DEFINE_ACTION_FUNCTION_NATIVE(_Sector, SetEnvironmentID, SetEnvironmentID) DEFINE_ACTION_FUNCTION_NATIVE(_Sector, SetEnvironmentID, SetEnvironmentID)
@ -1179,7 +1179,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(_Sector, RemoveForceField, RemoveForceField)
static void SetEnvironment(sector_t *self, const FString &env) static void SetEnvironment(sector_t *self, const FString &env)
{ {
level.Zones[self->ZoneNumber].Environment = S_FindEnvironment(env); self->Level->Zones[self->ZoneNumber].Environment = S_FindEnvironment(env);
} }
DEFINE_ACTION_FUNCTION_NATIVE(_Sector, SetEnvironment, SetEnvironment) DEFINE_ACTION_FUNCTION_NATIVE(_Sector, SetEnvironment, SetEnvironment)
@ -2352,19 +2352,21 @@ DEFINE_ACTION_FUNCTION_NATIVE(DBaseStatusBar, SetClipRect, SBar_SetClipRect)
static void GetGlobalACSString(int index, FString *result) static void GetGlobalACSString(int index, FString *result)
{ {
*result = level.Behaviors.LookupString(ACS_GlobalVars[index]); *result = currentUILevel->Behaviors.LookupString(ACS_GlobalVars[index]);
} }
DEFINE_ACTION_FUNCTION_NATIVE(DBaseStatusBar, GetGlobalACSString, GetGlobalACSString) DEFINE_ACTION_FUNCTION_NATIVE(DBaseStatusBar, GetGlobalACSString, GetGlobalACSString)
{ {
PARAM_PROLOGUE; PARAM_PROLOGUE;
PARAM_INT(index); PARAM_INT(index);
ACTION_RETURN_STRING(level.Behaviors.LookupString(ACS_GlobalVars[index])); FString res;
GetGlobalACSString(index, &res);
ACTION_RETURN_STRING(res);
} }
static void GetGlobalACSArrayString(int arrayno, int index, FString *result) static void GetGlobalACSArrayString(int arrayno, int index, FString *result)
{ {
*result = level.Behaviors.LookupString(ACS_GlobalVars[index]); *result = currentUILevel->Behaviors.LookupString(ACS_GlobalVars[index]);
} }
DEFINE_ACTION_FUNCTION_NATIVE(DBaseStatusBar, GetGlobalACSArrayString, GetGlobalACSArrayString) DEFINE_ACTION_FUNCTION_NATIVE(DBaseStatusBar, GetGlobalACSArrayString, GetGlobalACSArrayString)
@ -2372,7 +2374,9 @@ DEFINE_ACTION_FUNCTION_NATIVE(DBaseStatusBar, GetGlobalACSArrayString, GetGlobal
PARAM_PROLOGUE; PARAM_PROLOGUE;
PARAM_INT(arrayno); PARAM_INT(arrayno);
PARAM_INT(index); PARAM_INT(index);
ACTION_RETURN_STRING(level.Behaviors.LookupString(ACS_GlobalArrays[arrayno][index])); FString res;
GetGlobalACSArrayString(arrayno, index, &res);
ACTION_RETURN_STRING(res);
} }
static int GetGlobalACSValue(int index) static int GetGlobalACSValue(int index)
@ -2592,7 +2596,7 @@ DEFINE_ACTION_FUNCTION(FLevelLocals, GetChecksum)
for (int j = 0; j < 16; ++j) for (int j = 0; j < 16; ++j)
{ {
sprintf(md5string + j * 2, "%02x", level.md5[j]); sprintf(md5string + j * 2, "%02x", self->md5[j]);
} }
ACTION_RETURN_STRING((const char*)md5string); ACTION_RETURN_STRING((const char*)md5string);