diff --git a/docs/rh-log.txt b/docs/rh-log.txt index faa6f90de..fb3833266 100644 --- a/docs/rh-log.txt +++ b/docs/rh-log.txt @@ -1,4 +1,15 @@ April 17, 2006 (Changes by Graf Zahl) +- Fixed: The Oracle Pass is an item, not a key. Strictly speaking the + same applies to the Prison pass but having that as a key masks + some bad design in Strife so it is better to leave it a key. +- Fixed: The spectral lightning spot used a weird combination of flags + that made it act quite unexpectedly. After removing all flags except + MF_NOBLOCKMAP it seems to do what it is supposed to do. I also had + to add a new flag, MF5_NODROPOFF to prevent the spot from moving over + tall ledges. +- Fixed: When giving an autoactivatable item to the player a copy is + created to allow respawning. But when the item had been successully + used the original was destroyed, not the copy. - Fixed: dssiglup was misspelled as dssglup in SNDINFO so the Sigil's charging sound never played. - Fixed: The sigil doesn't use the generic weapon pickup sound. It should diff --git a/src/actor.h b/src/actor.h index 8d4996e2b..7cdf1d01a 100644 --- a/src/actor.h +++ b/src/actor.h @@ -275,6 +275,7 @@ enum MF5_FASTER = 0x00000001, // moves faster when DF_FAST_MONSTERS or nightmare is on. MF5_FASTMELEE = 0x00000002, // has a faster melee attack when DF_FAST_MONSTERS or nightmare is on. + MF5_NODROPOFF = 0x00000004, // cannot drop off under any circumstances. // --- mobj.renderflags --- diff --git a/src/g_shared/a_pickups.cpp b/src/g_shared/a_pickups.cpp index ebd06ecb2..dad016903 100644 --- a/src/g_shared/a_pickups.cpp +++ b/src/g_shared/a_pickups.cpp @@ -1132,8 +1132,8 @@ bool AInventory::TryPickup (AActor *toucher) { if (--copy->Amount <= 0) { - flags &= ~MF_SPECIAL; - SetState (&States[S_HOLDANDDESTROY]); + copy->flags &= ~MF_SPECIAL; + copy->SetState (&States[S_HOLDANDDESTROY]); } } } diff --git a/src/g_strife/a_spectral.cpp b/src/g_strife/a_spectral.cpp index 64006e739..cc08ab843 100644 --- a/src/g_strife/a_spectral.cpp +++ b/src/g_strife/a_spectral.cpp @@ -234,8 +234,9 @@ IMPLEMENT_ACTOR (ASpectralLightningSpot, Strife, -1, 0) PROP_SpawnState (0) PROP_SpeedFixed (18) PROP_ReactionTime (70) - PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF) - PROP_Flags3 (MF3_FLOORHUGGER) + PROP_Flags (MF_NOBLOCKMAP) + PROP_Flags3 (MF3_NOBLOCKMONST) + PROP_Flags5 (MF5_NODROPOFF) PROP_RenderStyle (STYLE_Translucent) PROP_Alpha (HR_SHADOW) END_DEFAULTS diff --git a/src/g_strife/a_strifekeys.cpp b/src/g_strife/a_strifekeys.cpp index e0261ee50..0951899e1 100644 --- a/src/g_strife/a_strifekeys.cpp +++ b/src/g_strife/a_strifekeys.cpp @@ -825,7 +825,6 @@ END_DEFAULTS bool APrisonPass::TryPickup (AActor *toucher) { - Super::TryPickup (toucher); EV_DoDoor (DDoor::doorOpen, NULL, toucher, 223, 2*FRACUNIT, 0, 0, 0); toucher->GiveInventoryType (QuestItemClasses[9]); return true; @@ -855,9 +854,9 @@ bool APrisonPass::SpecialDropAction (AActor *dropper) // Oracle Pass -------------------------------------------------------------- -class AOraclePass : public AKey +class AOraclePass : public AInventory { - DECLARE_ACTOR (AOraclePass, AKey) + DECLARE_ACTOR (AOraclePass, AInventory) public: bool TryPickup (AActor *toucher); const char *PickupMessage (); @@ -873,6 +872,7 @@ IMPLEMENT_ACTOR (AOraclePass, Strife, -1, 0) PROP_StrifeTeaserType (292) PROP_StrifeTeaserType2 (309) PROP_SpawnState (0) + PROP_Inventory_FlagsSet(IF_INVBAR) PROP_Inventory_Icon ("I_OTOK") PROP_Tag ("Oracle_Pass") END_DEFAULTS diff --git a/src/p_map.cpp b/src/p_map.cpp index 588a80247..f7bdd9ab2 100644 --- a/src/p_map.cpp +++ b/src/p_map.cpp @@ -1661,7 +1661,7 @@ BOOL P_TryMove (AActor *thing, fixed_t x, fixed_t y, } // killough 3/15/98: Allow certain objects to drop off - if (!dropoff && !(thing->flags & (MF_DROPOFF|MF_FLOAT|MF_MISSILE))) + if ((!dropoff && !(thing->flags & (MF_DROPOFF|MF_FLOAT|MF_MISSILE))) || (thing->flags5&MF5_NODROPOFF)) { fixed_t floorz = tmfloorz; // [RH] If the thing is standing on something, use its current z as the floorz. diff --git a/src/thingdef.cpp b/src/thingdef.cpp index fb6473789..2af6f0607 100644 --- a/src/thingdef.cpp +++ b/src/thingdef.cpp @@ -215,6 +215,10 @@ static flagdef ActorFlags[]= DEFINE_FLAG(MF4, FRIGHTENED, AActor, flags4), DEFINE_FLAG(MF4, NOBOUNCESOUND, AActor, flags4), + DEFINE_FLAG(MF5, FASTER, AActor, flags5), + DEFINE_FLAG(MF5, FASTMELEE, AActor, flags5), + DEFINE_FLAG(MF5, NODROPOFF, AActor, flags5), + // Effect flags DEFINE_FLAG(FX, VISIBILITYPULSE, AActor, effects), DEFINE_FLAG2(FX_ROCKET, ROCKETTRAIL, AActor, effects),