This commit is contained in:
Rachael Alexanderson 2017-02-15 11:19:51 -05:00
commit bf1aa71194
7 changed files with 35 additions and 25 deletions

View file

@ -230,7 +230,7 @@ bool AWeapon::CheckAmmo (int fireMode, bool autoSwitch, bool requireAmmo, int am
int enough, enoughmask; int enough, enoughmask;
int lAmmoUse1; int lAmmoUse1;
if ((dmflags & DF_INFINITE_AMMO) || (Owner->player->cheats & CF_INFINITEAMMO)) if ((dmflags & DF_INFINITE_AMMO) || (Owner->FindInventory (PClass::FindActor(NAME_PowerInfiniteAmmo), true) != nullptr))
{ {
return true; return true;
} }
@ -311,7 +311,7 @@ DEFINE_ACTION_FUNCTION(AWeapon, CheckAmmo)
bool AWeapon::DepleteAmmo (bool altFire, bool checkEnough, int ammouse) bool AWeapon::DepleteAmmo (bool altFire, bool checkEnough, int ammouse)
{ {
if (!((dmflags & DF_INFINITE_AMMO) || (Owner->player->cheats & CF_INFINITEAMMO))) if (!((dmflags & DF_INFINITE_AMMO) || (Owner->FindInventory (PClass::FindActor(NAME_PowerInfiniteAmmo), true) != nullptr)))
{ {
if (checkEnough && !CheckAmmo (altFire ? AltFire : PrimaryFire, false, false, ammouse)) if (checkEnough && !CheckAmmo (altFire ? AltFire : PrimaryFire, false, false, ammouse))
{ {

View file

@ -1283,7 +1283,7 @@ DMenuItemBase * CreateOptionMenuItemSubmenu(const char *label, FName cmd, int ce
DMenuItemBase * CreateOptionMenuItemControl(const char *label, FName cmd, FKeyBindings *bindings) DMenuItemBase * CreateOptionMenuItemControl(const char *label, FName cmd, FKeyBindings *bindings)
{ {
auto c = PClass::FindClass("OptionMenuItemControl"); auto c = PClass::FindClass("OptionMenuItemControlBase");
auto p = c->CreateNew(); auto p = c->CreateNew();
VMValue params[] = { p, FString(label), cmd.GetIndex(), bindings }; VMValue params[] = { p, FString(label), cmd.GetIndex(), bindings };
auto f = dyn_cast<PFunction>(c->Symbols.FindSymbol("Init", false)); auto f = dyn_cast<PFunction>(c->Symbols.FindSymbol("Init", false));

View file

@ -203,6 +203,8 @@ xx(CallTryPickup)
xx(QuestItem25) xx(QuestItem25)
xx(QuestItem28) xx(QuestItem28)
xx(QuestItem29) xx(QuestItem29)
xx(PowerDoubleFiringSpeed)
xx(PowerInfiniteAmmo)
xx(AcolyteBlue) xx(AcolyteBlue)
xx(SpectralLightningV1) xx(SpectralLightningV1)

View file

@ -771,7 +771,7 @@ void P_LineOpening_XFloors (FLineOpening &open, AActor * thing, const line_t *li
int highestfloorterrain = -1; int highestfloorterrain = -1;
FTextureID lowestceilingpic; FTextureID lowestceilingpic;
sector_t *lowestceilingsec = NULL, *highestfloorsec = NULL; sector_t *lowestceilingsec = NULL, *highestfloorsec = NULL;
secplane_t *highestfloorplanes[2] = { NULL, NULL }; secplane_t *highestfloorplanes[2] = { &open.frontfloorplane, &open.backfloorplane };
highestfloorpic.SetInvalid(); highestfloorpic.SetInvalid();
lowestceilingpic.SetInvalid(); lowestceilingpic.SetInvalid();
@ -798,14 +798,20 @@ void P_LineOpening_XFloors (FLineOpening &open, AActor * thing, const line_t *li
lowestceilingsec = j == 0 ? linedef->frontsector : linedef->backsector; lowestceilingsec = j == 0 ? linedef->frontsector : linedef->backsector;
} }
if(ff_top > highestfloor && delta1 <= delta2 && (!restrict || thing->Z() >= ff_top)) if(delta1 <= delta2 && (!restrict || thing->Z() >= ff_top))
{
if (ff_top > highestfloor)
{ {
highestfloor = ff_top; highestfloor = ff_top;
highestfloorpic = *rover->top.texture; highestfloorpic = *rover->top.texture;
highestfloorterrain = rover->model->GetTerrain(rover->top.isceiling); highestfloorterrain = rover->model->GetTerrain(rover->top.isceiling);
highestfloorsec = j == 0 ? linedef->frontsector : linedef->backsector; highestfloorsec = j == 0 ? linedef->frontsector : linedef->backsector;
}
if (ff_top > highestfloorplanes[j]->ZatPoint(x, y))
{
highestfloorplanes[j] = rover->top.plane; highestfloorplanes[j] = rover->top.plane;
} }
}
if(ff_top > lowestfloor[j] && ff_top <= thing->Z() + thing->MaxStepHeight) lowestfloor[j] = ff_top; if(ff_top > lowestfloor[j] && ff_top <= thing->Z() + thing->MaxStepHeight) lowestfloor[j] = ff_top;
} }
} }
@ -816,17 +822,17 @@ void P_LineOpening_XFloors (FLineOpening &open, AActor * thing, const line_t *li
open.floorpic = highestfloorpic; open.floorpic = highestfloorpic;
open.floorterrain = highestfloorterrain; open.floorterrain = highestfloorterrain;
open.bottomsec = highestfloorsec; open.bottomsec = highestfloorsec;
if (highestfloorplanes[0]) }
if (highestfloorplanes[0] != &open.frontfloorplane)
{ {
open.frontfloorplane = *highestfloorplanes[0]; open.frontfloorplane = *highestfloorplanes[0];
if (open.frontfloorplane.fC() < 0) open.frontfloorplane.FlipVert(); if (open.frontfloorplane.fC() < 0) open.frontfloorplane.FlipVert();
} }
if (highestfloorplanes[1]) if (highestfloorplanes[1] != &open.backfloorplane)
{ {
open.backfloorplane = *highestfloorplanes[1]; open.backfloorplane = *highestfloorplanes[1];
if (open.backfloorplane.fC() < 0) open.backfloorplane.FlipVert(); if (open.backfloorplane.fC() < 0) open.backfloorplane.FlipVert();
} }
}
if(lowestceiling < open.top) if(lowestceiling < open.top)
{ {

View file

@ -2841,7 +2841,7 @@ FUNC(LS_SetPlayerProperty)
// Add or remove a power // Add or remove a power
if (arg2 >= PROP_INVULNERABILITY && arg2 <= PROP_SPEED) if (arg2 >= PROP_INVULNERABILITY && arg2 <= PROP_SPEED)
{ {
static ENamedName powers[11] = static ENamedName powers[13] =
{ {
NAME_PowerInvulnerable, NAME_PowerInvulnerable,
NAME_PowerStrength, NAME_PowerStrength,
@ -2853,7 +2853,9 @@ FUNC(LS_SetPlayerProperty)
NAME_PowerFlight, NAME_PowerFlight,
NAME_None, NAME_None,
NAME_None, NAME_None,
NAME_PowerSpeed NAME_PowerSpeed,
NAME_PowerInfiniteAmmo,
NAME_PowerDoubleFiringSpeed
}; };
int power = arg2 - PROP_INVULNERABILITY; int power = arg2 - PROP_INVULNERABILITY;

View file

@ -1447,7 +1447,7 @@ void DPSprite::Tick()
Tics--; Tics--;
// [BC] Apply double firing speed. // [BC] Apply double firing speed.
if ((Flags & PSPF_POWDOUBLE) && Tics && (Owner->cheats & CF_DOUBLEFIRINGSPEED)) if ((Flags & PSPF_POWDOUBLE) && Tics && (Owner->mo->FindInventory (PClass::FindActor(NAME_PowerDoubleFiringSpeed), true)))
Tics--; Tics--;
if (!Tics) if (!Tics)

View file

@ -1854,7 +1854,7 @@ public:
intptr_t v1i = intptr_t(ParsedLines[i].v1); intptr_t v1i = intptr_t(ParsedLines[i].v1);
intptr_t v2i = intptr_t(ParsedLines[i].v2); intptr_t v2i = intptr_t(ParsedLines[i].v2);
if (v1i >= level.vertexes.Size() || v2i >= level.vertexes.Size() || v1i < 0 || v2i < 0) if ((unsigned)v1i >= level.vertexes.Size() || (unsigned)v2i >= level.vertexes.Size())
{ {
I_Error ("Line %d has invalid vertices: %zd and/or %zd.\nThe map only contains %u vertices.", i+skipped, v1i, v2i, level.vertexes.Size()); I_Error ("Line %d has invalid vertices: %zd and/or %zd.\nThe map only contains %u vertices.", i+skipped, v1i, v2i, level.vertexes.Size());
} }