diff --git a/src/g_inventory/a_weapons.cpp b/src/g_inventory/a_weapons.cpp index 094cea99a..d5e8a1b85 100644 --- a/src/g_inventory/a_weapons.cpp +++ b/src/g_inventory/a_weapons.cpp @@ -53,12 +53,12 @@ // //=========================================================================== -FString WeaponSection; +static FString WeaponSection; TArray KeyConfWeapons; -FWeaponSlots *PlayingKeyConf; +static FWeaponSlots *PlayingKeyConf; -TArray Weapons_ntoh; -TMap Weapons_hton; +static TArray Weapons_ntoh; +static TMap Weapons_hton; static int ntoh_cmp(const void *a, const void *b); diff --git a/src/g_shared/a_action.cpp b/src/g_shared/a_action.cpp index 4ff0439be..39a924135 100644 --- a/src/g_shared/a_action.cpp +++ b/src/g_shared/a_action.cpp @@ -205,7 +205,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_QueueCorpse) return 0; } -// Remove an self from the queue (for resurrection) +// Remove an actor from the queue (for resurrection) DEFINE_ACTION_FUNCTION(AActor, A_DeQueueCorpse) { PARAM_SELF_PROLOGUE(AActor); diff --git a/src/g_shared/a_decals.cpp b/src/g_shared/a_decals.cpp index 09110bf75..7828bd950 100644 --- a/src/g_shared/a_decals.cpp +++ b/src/g_shared/a_decals.cpp @@ -45,11 +45,14 @@ #include "g_levellocals.h" #include "vm.h" -static double DecalWidth, DecalLeft, DecalRight; -static double SpreadZ; -static const DBaseDecal *SpreadSource; -static const FDecalTemplate *SpreadTemplate; -static TArray SpreadStack; +struct SpreadInfo +{ + double DecalWidth, DecalLeft, DecalRight; + double SpreadZ; + const DBaseDecal *SpreadSource; + const FDecalTemplate *SpreadTemplate; + TArray SpreadStack; +}; static int ImpactCount; @@ -399,11 +402,11 @@ static side_t *NextWall (const side_t *wall) return NULL; } -void DBaseDecal::SpreadLeft (double r, vertex_t *v1, side_t *feelwall, F3DFloor *ffloor) +void DBaseDecal::SpreadLeft (double r, vertex_t *v1, side_t *feelwall, F3DFloor *ffloor, SpreadInfo *spread) { double ldx, ldy; - SpreadStack.Push (feelwall); + spread->SpreadStack.Push (feelwall); while (r < 0 && feelwall->LeftSide != NO_SIDE) { @@ -415,21 +418,21 @@ void DBaseDecal::SpreadLeft (double r, vertex_t *v1, side_t *feelwall, F3DFloor feelwall = &level.sides[feelwall->LeftSide]; GetWallStuff (feelwall, v1, ldx, ldy); double wallsize = Length (ldx, ldy); - r += DecalLeft; + r += spread->DecalLeft; x += r*ldx / wallsize; y += r*ldy / wallsize; r = wallsize + startr; - SpreadSource->CloneSelf (SpreadTemplate, x, y, SpreadZ, feelwall, ffloor); - SpreadStack.Push (feelwall); + spread->SpreadSource->CloneSelf (spread->SpreadTemplate, x, y, spread->SpreadZ, feelwall, ffloor); + spread->SpreadStack.Push (feelwall); side_t *nextwall = NextWall (feelwall); if (nextwall != NULL && nextwall->LeftSide != NO_SIDE) { int i; - for (i = SpreadStack.Size(); i-- > 0; ) + for (i = spread->SpreadStack.Size(); i-- > 0; ) { - if (SpreadStack[i] == nextwall) + if (spread->SpreadStack[i] == nextwall) break; } if (i == -1) @@ -437,18 +440,18 @@ void DBaseDecal::SpreadLeft (double r, vertex_t *v1, side_t *feelwall, F3DFloor vertex_t *v2; GetWallStuff (nextwall, v2, ldx, ldy); - SpreadLeft (startr, v2, nextwall, ffloor); + SpreadLeft (startr, v2, nextwall, ffloor, spread); } } } } -void DBaseDecal::SpreadRight (double r, side_t *feelwall, double wallsize, F3DFloor *ffloor) +void DBaseDecal::SpreadRight (double r, side_t *feelwall, double wallsize, F3DFloor *ffloor, SpreadInfo *spread) { vertex_t *v1; double x, y, ldx, ldy; - SpreadStack.Push (feelwall); + spread->SpreadStack.Push (feelwall); while (r > wallsize && feelwall->RightSide != NO_SIDE) { @@ -459,32 +462,33 @@ void DBaseDecal::SpreadRight (double r, side_t *feelwall, double wallsize, F3DFl { int i; - for (i = SpreadStack.Size(); i-- > 0; ) + for (i = spread->SpreadStack.Size(); i-- > 0; ) { - if (SpreadStack[i] == nextwall) + if (spread->SpreadStack[i] == nextwall) break; } if (i == -1) { - SpreadRight (r, nextwall, wallsize, ffloor); + SpreadRight (r, nextwall, wallsize, ffloor, spread); } } - r = DecalWidth - r + wallsize - DecalLeft; + r = spread->DecalWidth - r + wallsize - spread->DecalLeft; GetWallStuff (feelwall, v1, ldx, ldy); x = v1->fX(); y = v1->fY(); wallsize = Length (ldx, ldy); x -= r*ldx / wallsize; y -= r*ldy / wallsize; - r = DecalRight - r; - SpreadSource->CloneSelf (SpreadTemplate, x, y, SpreadZ, feelwall, ffloor); - SpreadStack.Push (feelwall); + r = spread->DecalRight - r; + spread->SpreadSource->CloneSelf (spread->SpreadTemplate, x, y, spread->SpreadZ, feelwall, ffloor); + spread->SpreadStack.Push (feelwall); } } void DBaseDecal::Spread (const FDecalTemplate *tpl, side_t *wall, double x, double y, double z, F3DFloor * ffloor) { + SpreadInfo spread; FTexture *tex; vertex_t *v1; double rorg, ldx, ldy; @@ -499,21 +503,20 @@ void DBaseDecal::Spread (const FDecalTemplate *tpl, side_t *wall, double x, doub int dwidth = tex->GetDisplayWidth (); - DecalWidth = dwidth * ScaleX; - DecalLeft = tex->GetDisplayLeftOffset() * ScaleX; - DecalRight = DecalWidth - DecalLeft; - SpreadSource = this; - SpreadTemplate = tpl; - SpreadZ = z; + spread.DecalWidth = dwidth * ScaleX; + spread.DecalLeft = tex->GetDisplayLeftOffset() * ScaleX; + spread.DecalRight = spread.DecalWidth - spread.DecalLeft; + spread.SpreadSource = this; + spread.SpreadTemplate = tpl; + spread.SpreadZ = z; // Try spreading left first - SpreadLeft (rorg - DecalLeft, v1, wall, ffloor); - SpreadStack.Clear (); + SpreadLeft (rorg - spread.DecalLeft, v1, wall, ffloor, &spread); + spread.SpreadStack.Clear (); // Then try spreading right - SpreadRight (rorg + DecalRight, wall, - Length (wall->linedef->Delta().X, wall->linedef->Delta().Y), ffloor); - SpreadStack.Clear (); + SpreadRight (rorg + spread.DecalRight, wall, + Length (wall->linedef->Delta().X, wall->linedef->Delta().Y), ffloor, &spread); } DBaseDecal *DBaseDecal::CloneSelf (const FDecalTemplate *tpl, double ix, double iy, double iz, side_t *wall, F3DFloor * ffloor) const diff --git a/src/g_shared/a_sharedglobal.h b/src/g_shared/a_sharedglobal.h index a63056914..e221f3552 100644 --- a/src/g_shared/a_sharedglobal.h +++ b/src/g_shared/a_sharedglobal.h @@ -9,6 +9,7 @@ struct vertex_t; struct side_t; struct F3DFloor; class DBaseDecal; +struct SpreadInfo; class DBaseDecal *ShootDecal(const FDecalTemplate *tpl, AActor *basisactor, sector_t *sec, double x, double y, double z, DAngle angle, double tracedist, bool permanent); void SprayDecal(AActor *shooter, const char *name,double distance = 172.); @@ -52,8 +53,8 @@ protected: void CalcFracPos(side_t *wall, double x, double y); void Remove (); - static void SpreadLeft (double r, vertex_t *v1, side_t *feelwall, F3DFloor *ffloor); - static void SpreadRight (double r, side_t *feelwall, double wallsize, F3DFloor *ffloor); + static void SpreadLeft (double r, vertex_t *v1, side_t *feelwall, F3DFloor *ffloor, SpreadInfo *spread); + static void SpreadRight (double r, side_t *feelwall, double wallsize, F3DFloor *ffloor, SpreadInfo *spread); }; class DImpactDecal : public DBaseDecal