mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-28 23:02:07 +00:00
SVN r54 (trunk)
This commit is contained in:
parent
c3c22c9453
commit
8e631eca0b
16 changed files with 120 additions and 23 deletions
|
@ -1,3 +1,21 @@
|
||||||
|
April 18, 2006 (Changes by Graf Zahl)
|
||||||
|
- Fixed A_CHolyAttack used linetarget to set the spirits' target actor.
|
||||||
|
But it assumed that this variable was still valid from shooting the
|
||||||
|
weapon. Not only is that not guaranteed. When used by the ClericBoss
|
||||||
|
it is an unwanted effect because the linetarget is most likely the
|
||||||
|
last thing the player fired at which normally is the ClericBoss itself.
|
||||||
|
A_CHolyAttack now sets tracer to the intended target instead of
|
||||||
|
relying on linetarget being preserved.
|
||||||
|
- Fixed: Strife's grenades only bounce twice off the floor. They also
|
||||||
|
bounce off all actors and immediately explode when hitting liquids.
|
||||||
|
- Fixed: Strife's flame thrower gives 100 ammo as a pickup item but only
|
||||||
|
40 when given in a dialog.
|
||||||
|
- Moved the sky change script starts for the Programmer into MAPINFO as
|
||||||
|
special death actions.
|
||||||
|
- Changed the sky in MAP09 of Strife to the blue sky to make it more
|
||||||
|
consistent. Now the sky change occurs when the player wakes up after
|
||||||
|
fighting the programmer.
|
||||||
|
|
||||||
April 18, 2006
|
April 18, 2006
|
||||||
- Fixed: FBaseStatusBar::DrBNumber() should behave like Doom's
|
- Fixed: FBaseStatusBar::DrBNumber() should behave like Doom's
|
||||||
STlib_drawNum(), and FDoomStatusBarTexture::DrawToBar() should add
|
STlib_drawNum(), and FDoomStatusBarTexture::DrawToBar() should add
|
||||||
|
|
|
@ -276,6 +276,8 @@ enum
|
||||||
MF5_FASTER = 0x00000001, // moves faster when DF_FAST_MONSTERS or nightmare is on.
|
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_FASTMELEE = 0x00000002, // has a faster melee attack when DF_FAST_MONSTERS or nightmare is on.
|
||||||
MF5_NODROPOFF = 0x00000004, // cannot drop off under any circumstances.
|
MF5_NODROPOFF = 0x00000004, // cannot drop off under any circumstances.
|
||||||
|
MF5_BOUNCEONACTORS = 0x00000008, // bouncing missile doesn't explode when it hits an actor
|
||||||
|
MF5_EXPLODEONWATER = 0x00000010, // bouncing missile explpdes when hitting a water surface
|
||||||
|
|
||||||
// --- mobj.renderflags ---
|
// --- mobj.renderflags ---
|
||||||
|
|
||||||
|
@ -649,6 +651,7 @@ public:
|
||||||
WORD SpawnFlags;
|
WORD SpawnFlags;
|
||||||
fixed_t meleerange;
|
fixed_t meleerange;
|
||||||
fixed_t bouncefactor; // Strife's grenades use 50%, Hexen's Flechettes 70.
|
fixed_t bouncefactor; // Strife's grenades use 50%, Hexen's Flechettes 70.
|
||||||
|
int bouncecount; // Strife's grenades only bounce twice before exploding
|
||||||
|
|
||||||
// a linked list of sectors where this object appears
|
// a linked list of sectors where this object appears
|
||||||
struct msecnode_s *touching_sectorlist; // phares 3/14/98
|
struct msecnode_s *touching_sectorlist; // phares 3/14/98
|
||||||
|
|
|
@ -245,7 +245,7 @@ IMPLEMENT_ACTOR (AHolyMissile, Hexen, -1, 0)
|
||||||
PROP_HeightFixed (8)
|
PROP_HeightFixed (8)
|
||||||
PROP_Damage (4)
|
PROP_Damage (4)
|
||||||
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
|
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
|
||||||
PROP_Flags2 (MF2_NOTELEPORT)
|
PROP_Flags2 (MF2_NOTELEPORT)
|
||||||
|
|
||||||
PROP_SpawnState (0)
|
PROP_SpawnState (0)
|
||||||
PROP_DeathState (4)
|
PROP_DeathState (4)
|
||||||
|
@ -468,7 +468,8 @@ END_DEFAULTS
|
||||||
|
|
||||||
void A_CHolyAttack3 (AActor *actor)
|
void A_CHolyAttack3 (AActor *actor)
|
||||||
{
|
{
|
||||||
P_SpawnMissileZ (actor, actor->z + 40*FRACUNIT, actor->target, RUNTIME_CLASS(AHolyMissile));
|
AActor * missile = P_SpawnMissileZ (actor, actor->z + 40*FRACUNIT, actor->target, RUNTIME_CLASS(AHolyMissile));
|
||||||
|
if (missile != NULL) missile->tracer = NULL; // No initial target
|
||||||
S_Sound (actor, CHAN_WEAPON, "HolySymbolFire", 1, ATTN_NORM);
|
S_Sound (actor, CHAN_WEAPON, "HolySymbolFire", 1, ATTN_NORM);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -518,9 +519,9 @@ void A_CHolyAttack2 (AActor *actor)
|
||||||
{ // Ghosts last slightly less longer in DeathMatch
|
{ // Ghosts last slightly less longer in DeathMatch
|
||||||
mo->health = 85;
|
mo->health = 85;
|
||||||
}
|
}
|
||||||
if (linetarget)
|
if (actor->tracer)
|
||||||
{
|
{
|
||||||
mo->tracer = linetarget;
|
mo->tracer = actor->tracer;
|
||||||
mo->flags |= MF_NOCLIP|MF_SKULLFLY;
|
mo->flags |= MF_NOCLIP|MF_SKULLFLY;
|
||||||
mo->flags &= ~MF_MISSILE;
|
mo->flags &= ~MF_MISSILE;
|
||||||
}
|
}
|
||||||
|
@ -570,7 +571,9 @@ void A_CHolyAttack (AActor *actor)
|
||||||
if (!weapon->DepleteAmmo (weapon->bAltFire))
|
if (!weapon->DepleteAmmo (weapon->bAltFire))
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
P_SpawnPlayerMissile (actor, RUNTIME_CLASS(AHolyMissile));
|
AActor * missile = P_SpawnPlayerMissile (actor, RUNTIME_CLASS(AHolyMissile));
|
||||||
|
if (missile != NULL) missile->tracer = linetarget;
|
||||||
|
|
||||||
weapon->CHolyCount = 3;
|
weapon->CHolyCount = 3;
|
||||||
S_Sound (actor, CHAN_WEAPON, "HolySymbolFire", 1, ATTN_NORM);
|
S_Sound (actor, CHAN_WEAPON, "HolySymbolFire", 1, ATTN_NORM);
|
||||||
}
|
}
|
||||||
|
|
|
@ -293,5 +293,7 @@ void A_ProgrammerDeath (AActor *self)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
P_StartScript (self, NULL, 250, NULL, 0, 0, 0, 0, false, false);
|
// the sky change scripts are now done as special actions in MAPINFO
|
||||||
|
A_BossDeath(self);
|
||||||
|
//P_StartScript (self, NULL, 250, NULL, 0, 0, 0, 0, false, false);
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,6 +92,13 @@ class AStrifeWeapon : public AWeapon
|
||||||
DECLARE_STATELESS_ACTOR (AStrifeWeapon, AWeapon)
|
DECLARE_STATELESS_ACTOR (AStrifeWeapon, AWeapon)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class AFlameThrower : public AStrifeWeapon
|
||||||
|
{
|
||||||
|
DECLARE_ACTOR (AFlameThrower, AStrifeWeapon)
|
||||||
|
public:
|
||||||
|
const char *PickupMessage ();
|
||||||
|
};
|
||||||
|
|
||||||
class ASigil : public AStrifeWeapon
|
class ASigil : public AStrifeWeapon
|
||||||
{
|
{
|
||||||
DECLARE_ACTOR (ASigil, AStrifeWeapon)
|
DECLARE_ACTOR (ASigil, AStrifeWeapon)
|
||||||
|
|
|
@ -825,6 +825,7 @@ END_DEFAULTS
|
||||||
|
|
||||||
bool APrisonPass::TryPickup (AActor *toucher)
|
bool APrisonPass::TryPickup (AActor *toucher)
|
||||||
{
|
{
|
||||||
|
Super::TryPickup (toucher);
|
||||||
EV_DoDoor (DDoor::doorOpen, NULL, toucher, 223, 2*FRACUNIT, 0, 0, 0);
|
EV_DoDoor (DDoor::doorOpen, NULL, toucher, 223, 2*FRACUNIT, 0, 0, 0);
|
||||||
toucher->GiveInventoryType (QuestItemClasses[9]);
|
toucher->GiveInventoryType (QuestItemClasses[9]);
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#include "a_action.h"
|
#include "a_action.h"
|
||||||
#include "p_local.h"
|
#include "p_local.h"
|
||||||
#include "a_doomglobal.h"
|
#include "a_doomglobal.h"
|
||||||
|
#include "templates.h"
|
||||||
|
|
||||||
void A_Pain (AActor *);
|
void A_Pain (AActor *);
|
||||||
void A_PlayerScream (AActor *);
|
void A_PlayerScream (AActor *);
|
||||||
|
@ -24,6 +25,7 @@ class AStrifePlayer : public APlayerPawn
|
||||||
DECLARE_ACTOR (AStrifePlayer, APlayerPawn)
|
DECLARE_ACTOR (AStrifePlayer, APlayerPawn)
|
||||||
public:
|
public:
|
||||||
void GiveDefaultInventory ();
|
void GiveDefaultInventory ();
|
||||||
|
void TweakSpeeds (int &forward, int &side);
|
||||||
};
|
};
|
||||||
|
|
||||||
FState AStrifePlayer::States[] =
|
FState AStrifePlayer::States[] =
|
||||||
|
@ -138,3 +140,13 @@ void AStrifePlayer::GiveDefaultInventory ()
|
||||||
weapon = static_cast<AWeapon *>(player->mo->GiveInventoryType (TypeInfo::FindType ("PunchDagger")));
|
weapon = static_cast<AWeapon *>(player->mo->GiveInventoryType (TypeInfo::FindType ("PunchDagger")));
|
||||||
player->ReadyWeapon = player->PendingWeapon = weapon;
|
player->ReadyWeapon = player->PendingWeapon = weapon;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AStrifePlayer::TweakSpeeds (int &forward, int &side)
|
||||||
|
{
|
||||||
|
if (health<=10)
|
||||||
|
{
|
||||||
|
forward = clamp(forward, -0x1900, 0x1900);
|
||||||
|
side = clamp(side, -0x1800, 0x1800);
|
||||||
|
}
|
||||||
|
Super::TweakSpeeds (forward, side);
|
||||||
|
}
|
||||||
|
|
|
@ -955,15 +955,11 @@ void A_RocketInFlight (AActor *self)
|
||||||
|
|
||||||
void A_FireFlamer (AActor *);
|
void A_FireFlamer (AActor *);
|
||||||
|
|
||||||
class AFlameThrower : public AStrifeWeapon
|
|
||||||
|
const char *AFlameThrower::PickupMessage ()
|
||||||
{
|
{
|
||||||
DECLARE_ACTOR (AFlameThrower, AStrifeWeapon)
|
return "You picked up the flame thrower";
|
||||||
public:
|
}
|
||||||
const char *PickupMessage ()
|
|
||||||
{
|
|
||||||
return "You picked up the flame thrower";
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
FState AFlameThrower::States[] =
|
FState AFlameThrower::States[] =
|
||||||
{
|
{
|
||||||
|
@ -996,7 +992,7 @@ IMPLEMENT_ACTOR (AFlameThrower, Strife, 2005, 0)
|
||||||
PROP_Weapon_Flags (WIF_BOT_MELEE)
|
PROP_Weapon_Flags (WIF_BOT_MELEE)
|
||||||
PROP_Weapon_Kickback (0)
|
PROP_Weapon_Kickback (0)
|
||||||
PROP_Weapon_AmmoUse1 (1)
|
PROP_Weapon_AmmoUse1 (1)
|
||||||
PROP_Weapon_AmmoGive1 (40)
|
PROP_Weapon_AmmoGive1 (100)
|
||||||
PROP_Weapon_UpState (S_FLAMERUP)
|
PROP_Weapon_UpState (S_FLAMERUP)
|
||||||
PROP_Weapon_DownState (S_FLAMERDOWN)
|
PROP_Weapon_DownState (S_FLAMERDOWN)
|
||||||
PROP_Weapon_ReadyState (S_FLAMER)
|
PROP_Weapon_ReadyState (S_FLAMER)
|
||||||
|
@ -1513,9 +1509,11 @@ IMPLEMENT_ACTOR (AHEGrenade, Strife, -1, 0)
|
||||||
PROP_Flags2 (MF2_FLOORCLIP|MF2_NOTELEPORT|MF2_PCROSS|MF2_IMPACT|MF2_DOOMBOUNCE)
|
PROP_Flags2 (MF2_FLOORCLIP|MF2_NOTELEPORT|MF2_PCROSS|MF2_IMPACT|MF2_DOOMBOUNCE)
|
||||||
PROP_Flags3 (MF3_CANBOUNCEWATER)
|
PROP_Flags3 (MF3_CANBOUNCEWATER)
|
||||||
PROP_Flags4 (MF4_STRIFEDAMAGE|MF4_NOBOUNCESOUND)
|
PROP_Flags4 (MF4_STRIFEDAMAGE|MF4_NOBOUNCESOUND)
|
||||||
|
PROP_Flags5 (MF5_BOUNCEONACTORS|MF5_EXPLODEONWATER)
|
||||||
PROP_MaxStepHeight (4)
|
PROP_MaxStepHeight (4)
|
||||||
PROP_StrifeType (106)
|
PROP_StrifeType (106)
|
||||||
PROP_BounceFactor((FRACUNIT*5/10))
|
PROP_BounceFactor((FRACUNIT*5/10))
|
||||||
|
PROP_BounceCount(2)
|
||||||
PROP_SeeSound ("weapons/hegrenadeshoot")
|
PROP_SeeSound ("weapons/hegrenadeshoot")
|
||||||
PROP_DeathSound ("weapons/hegrenadebang")
|
PROP_DeathSound ("weapons/hegrenadebang")
|
||||||
END_DEFAULTS
|
END_DEFAULTS
|
||||||
|
@ -1562,9 +1560,11 @@ IMPLEMENT_ACTOR (APhosphorousGrenade, Strife, -1, 0)
|
||||||
PROP_Flags2 (MF2_FLOORCLIP|MF2_NOTELEPORT|MF2_PCROSS|MF2_IMPACT|MF2_DOOMBOUNCE)
|
PROP_Flags2 (MF2_FLOORCLIP|MF2_NOTELEPORT|MF2_PCROSS|MF2_IMPACT|MF2_DOOMBOUNCE)
|
||||||
PROP_Flags3 (MF3_CANBOUNCEWATER)
|
PROP_Flags3 (MF3_CANBOUNCEWATER)
|
||||||
PROP_Flags4 (MF4_STRIFEDAMAGE|MF4_NOBOUNCESOUND)
|
PROP_Flags4 (MF4_STRIFEDAMAGE|MF4_NOBOUNCESOUND)
|
||||||
|
PROP_Flags5 (MF5_BOUNCEONACTORS|MF5_EXPLODEONWATER)
|
||||||
PROP_MaxStepHeight (4)
|
PROP_MaxStepHeight (4)
|
||||||
PROP_StrifeType (107)
|
PROP_StrifeType (107)
|
||||||
PROP_BounceFactor((FRACUNIT*5/10))
|
PROP_BounceFactor((FRACUNIT*5/10))
|
||||||
|
PROP_BounceCount(2)
|
||||||
PROP_SeeSound ("weapons/phgrenadeshoot")
|
PROP_SeeSound ("weapons/phgrenadeshoot")
|
||||||
PROP_DeathSound ("weapons/phgrenadebang")
|
PROP_DeathSound ("weapons/phgrenadebang")
|
||||||
END_DEFAULTS
|
END_DEFAULTS
|
||||||
|
|
|
@ -277,6 +277,7 @@ enum
|
||||||
ADEF_MaxDropOffHeight,
|
ADEF_MaxDropOffHeight,
|
||||||
ADEF_MaxStepHeight,
|
ADEF_MaxStepHeight,
|
||||||
ADEF_BounceFactor,
|
ADEF_BounceFactor,
|
||||||
|
ADEF_BounceCount,
|
||||||
|
|
||||||
ADEF_SpawnState,
|
ADEF_SpawnState,
|
||||||
ADEF_SeeState,
|
ADEF_SeeState,
|
||||||
|
|
|
@ -214,6 +214,7 @@ static void ApplyActorDefault (int defnum, const char *datastr, int dataint)
|
||||||
case ADEF_MaxDropOffHeight: actor->MaxDropOffHeight = dataint; break;
|
case ADEF_MaxDropOffHeight: actor->MaxDropOffHeight = dataint; break;
|
||||||
case ADEF_MaxStepHeight: actor->MaxStepHeight = dataint; break;
|
case ADEF_MaxStepHeight: actor->MaxStepHeight = dataint; break;
|
||||||
case ADEF_BounceFactor: actor->bouncefactor = dataint; break;
|
case ADEF_BounceFactor: actor->bouncefactor = dataint; break;
|
||||||
|
case ADEF_BounceCount: actor->bouncecount = dataint; break;
|
||||||
|
|
||||||
case ADEF_SpawnState: actor->SpawnState = datastate; break;
|
case ADEF_SpawnState: actor->SpawnState = datastate; break;
|
||||||
case ADEF_SeeState: actor->SeeState = datastate; break;
|
case ADEF_SeeState: actor->SeeState = datastate; break;
|
||||||
|
|
|
@ -257,6 +257,7 @@ public:
|
||||||
#define PROP_MaxDropOffHeight(x) ADD_FIXD_PROP(ADEF_MaxDropOffHeight,x)
|
#define PROP_MaxDropOffHeight(x) ADD_FIXD_PROP(ADEF_MaxDropOffHeight,x)
|
||||||
#define PROP_MaxStepHeight(x) ADD_FIXD_PROP(ADEF_MaxStepHeight,x)
|
#define PROP_MaxStepHeight(x) ADD_FIXD_PROP(ADEF_MaxStepHeight,x)
|
||||||
#define PROP_BounceFactor(x) ADD_LONG_PROP(ADEF_BounceFactor,x)
|
#define PROP_BounceFactor(x) ADD_LONG_PROP(ADEF_BounceFactor,x)
|
||||||
|
#define PROP_BounceCount(x) ADD_LONG_PROP(ADEF_BounceCount,x)
|
||||||
|
|
||||||
#define PROP_SpawnState(x) ADD_BYTE_PROP(ADEF_SpawnState,x)
|
#define PROP_SpawnState(x) ADD_BYTE_PROP(ADEF_SpawnState,x)
|
||||||
#define PROP_SeeState(x) ADD_BYTE_PROP(ADEF_SeeState,x)
|
#define PROP_SeeState(x) ADD_BYTE_PROP(ADEF_SeeState,x)
|
||||||
|
|
|
@ -984,6 +984,11 @@ static void PickConversationReply ()
|
||||||
level.total_items--;
|
level.total_items--;
|
||||||
item->flags &= ~MF_COUNTITEM;
|
item->flags &= ~MF_COUNTITEM;
|
||||||
}
|
}
|
||||||
|
if (item->IsA(RUNTIME_CLASS(AFlameThrower)))
|
||||||
|
{
|
||||||
|
// The flame thrower gives less ammo when given in a dialog
|
||||||
|
static_cast<AWeapon*>(item)->AmmoGive1 = 40;
|
||||||
|
}
|
||||||
item->flags |= MF_DROPPED;
|
item->flags |= MF_DROPPED;
|
||||||
if (!item->TryPickup (players[consoleplayer].mo))
|
if (!item->TryPickup (players[consoleplayer].mo))
|
||||||
{
|
{
|
||||||
|
|
|
@ -228,6 +228,7 @@ void AActor::Serialize (FArchive &arc)
|
||||||
TexMan.WriteTexture (arc, picnum);
|
TexMan.WriteTexture (arc, picnum);
|
||||||
}
|
}
|
||||||
TexMan.WriteTexture (arc, floorpic);
|
TexMan.WriteTexture (arc, floorpic);
|
||||||
|
TexMan.WriteTexture (arc, ceilingpic);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -242,6 +243,7 @@ void AActor::Serialize (FArchive &arc)
|
||||||
picnum = TexMan.ReadTexture (arc);
|
picnum = TexMan.ReadTexture (arc);
|
||||||
}
|
}
|
||||||
floorpic = TexMan.ReadTexture (arc);
|
floorpic = TexMan.ReadTexture (arc);
|
||||||
|
ceilingpic = TexMan.ReadTexture (arc);
|
||||||
}
|
}
|
||||||
arc << TIDtoHate;
|
arc << TIDtoHate;
|
||||||
if (TIDtoHate == 0)
|
if (TIDtoHate == 0)
|
||||||
|
@ -334,6 +336,7 @@ void AActor::Serialize (FArchive &arc)
|
||||||
<< MaxDropOffHeight
|
<< MaxDropOffHeight
|
||||||
<< MaxStepHeight
|
<< MaxStepHeight
|
||||||
<< bouncefactor
|
<< bouncefactor
|
||||||
|
<< bouncecount
|
||||||
<< meleerange
|
<< meleerange
|
||||||
<< DamageType;
|
<< DamageType;
|
||||||
|
|
||||||
|
@ -1101,9 +1104,25 @@ void P_ExplodeMissile (AActor *mo, line_t *line)
|
||||||
|
|
||||||
bool AActor::FloorBounceMissile (secplane_t &plane)
|
bool AActor::FloorBounceMissile (secplane_t &plane)
|
||||||
{
|
{
|
||||||
if (z <= floorz && P_HitFloor (this) && !(flags3 & MF3_CANBOUNCEWATER))
|
if (z <= floorz && P_HitFloor (this))
|
||||||
{ // Landed in some sort of liquid
|
{
|
||||||
Destroy ();
|
// Landed in some sort of liquid
|
||||||
|
if (flags5 & MF5_EXPLODEONWATER)
|
||||||
|
{
|
||||||
|
P_ExplodeMissile(this, NULL);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (!(flags3 & MF3_CANBOUNCEWATER))
|
||||||
|
{
|
||||||
|
Destroy ();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// The amount of bounces is limited
|
||||||
|
if (bouncecount>0 && --bouncecount==0)
|
||||||
|
{
|
||||||
|
P_ExplodeMissile(this, NULL);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1521,9 +1540,10 @@ void P_XYMovement (AActor *mo, fixed_t scrollx, fixed_t scrolly)
|
||||||
{
|
{
|
||||||
if (mo->flags2 & MF2_BOUNCE2)
|
if (mo->flags2 & MF2_BOUNCE2)
|
||||||
{
|
{
|
||||||
if ((BlockingMobj->flags2 & MF2_REFLECTIVE) ||
|
if (mo->flags5&MF5_BOUNCEONACTORS ||
|
||||||
|
(BlockingMobj->flags2 & MF2_REFLECTIVE) ||
|
||||||
((!BlockingMobj->player) &&
|
((!BlockingMobj->player) &&
|
||||||
(!(BlockingMobj->flags3 & MF3_ISMONSTER))))
|
(!(BlockingMobj->flags3 & MF3_ISMONSTER))))
|
||||||
{
|
{
|
||||||
fixed_t speed;
|
fixed_t speed;
|
||||||
|
|
||||||
|
@ -1536,7 +1556,7 @@ void P_XYMovement (AActor *mo, fixed_t scrollx, fixed_t scrolly)
|
||||||
angle >>= ANGLETOFINESHIFT;
|
angle >>= ANGLETOFINESHIFT;
|
||||||
mo->momx = FixedMul (speed, finecosine[angle]);
|
mo->momx = FixedMul (speed, finecosine[angle]);
|
||||||
mo->momy = FixedMul (speed, finesine[angle]);
|
mo->momy = FixedMul (speed, finesine[angle]);
|
||||||
if (mo->SeeSound)
|
if (mo->SeeSound && !(mo->flags4&MF4_NOBOUNCESOUND))
|
||||||
{
|
{
|
||||||
S_SoundID (mo, CHAN_VOICE, mo->SeeSound, 1, ATTN_IDLE);
|
S_SoundID (mo, CHAN_VOICE, mo->SeeSound, 1, ATTN_IDLE);
|
||||||
}
|
}
|
||||||
|
@ -2980,6 +3000,7 @@ BEGIN_DEFAULTS (AActor, Any, -1, 0)
|
||||||
PROP_MaxDropOffHeight(24)
|
PROP_MaxDropOffHeight(24)
|
||||||
PROP_MaxStepHeight(24)
|
PROP_MaxStepHeight(24)
|
||||||
PROP_BounceFactor(FRACUNIT*7/10)
|
PROP_BounceFactor(FRACUNIT*7/10)
|
||||||
|
PROP_BounceCount(-1)
|
||||||
END_DEFAULTS
|
END_DEFAULTS
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
|
@ -218,6 +218,8 @@ static flagdef ActorFlags[]=
|
||||||
DEFINE_FLAG(MF5, FASTER, AActor, flags5),
|
DEFINE_FLAG(MF5, FASTER, AActor, flags5),
|
||||||
DEFINE_FLAG(MF5, FASTMELEE, AActor, flags5),
|
DEFINE_FLAG(MF5, FASTMELEE, AActor, flags5),
|
||||||
DEFINE_FLAG(MF5, NODROPOFF, AActor, flags5),
|
DEFINE_FLAG(MF5, NODROPOFF, AActor, flags5),
|
||||||
|
DEFINE_FLAG(MF5, BOUNCEONACTORS, AActor, flags5),
|
||||||
|
DEFINE_FLAG(MF5, EXPLODEONWATER, AActor, flags5),
|
||||||
|
|
||||||
// Effect flags
|
// Effect flags
|
||||||
DEFINE_FLAG(FX, VISIBILITYPULSE, AActor, effects),
|
DEFINE_FLAG(FX, VISIBILITYPULSE, AActor, effects),
|
||||||
|
@ -2644,7 +2646,16 @@ static void ActorBloodColor (AActor *defaults, Baggage &bag)
|
||||||
static void ActorBounceFactor (AActor *defaults, Baggage &bag)
|
static void ActorBounceFactor (AActor *defaults, Baggage &bag)
|
||||||
{
|
{
|
||||||
SC_MustGetFloat ();
|
SC_MustGetFloat ();
|
||||||
defaults->bouncefactor = fixed_t(sc_Float * FRACUNIT);
|
defaults->bouncefactor = clamp<fixed_t>(fixed_t(sc_Float * FRACUNIT), 0, FRACUNIT);
|
||||||
|
}
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
static void ActorBounceCount (AActor *defaults, Baggage &bag)
|
||||||
|
{
|
||||||
|
SC_MustGetNumber ();
|
||||||
|
defaults->bouncecount = sc_Number;
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
@ -3209,6 +3220,7 @@ static const ActorProps props[] =
|
||||||
{ "armor.savepercent", (apf)ArmorSavePercent, RUNTIME_CLASS(AActor) },
|
{ "armor.savepercent", (apf)ArmorSavePercent, RUNTIME_CLASS(AActor) },
|
||||||
{ "attacksound", ActorAttackSound, RUNTIME_CLASS(AActor) },
|
{ "attacksound", ActorAttackSound, RUNTIME_CLASS(AActor) },
|
||||||
{ "bloodcolor", ActorBloodColor, RUNTIME_CLASS(AActor) },
|
{ "bloodcolor", ActorBloodColor, RUNTIME_CLASS(AActor) },
|
||||||
|
{ "bouncecount", ActorBounceCount, RUNTIME_CLASS(AActor) },
|
||||||
{ "bouncefactor", ActorBounceFactor, RUNTIME_CLASS(AActor) },
|
{ "bouncefactor", ActorBounceFactor, RUNTIME_CLASS(AActor) },
|
||||||
{ "burn", ActorBurnState, RUNTIME_CLASS(AActor) },
|
{ "burn", ActorBurnState, RUNTIME_CLASS(AActor) },
|
||||||
{ "burnheight", ActorBurnHeight, RUNTIME_CLASS(AActor) },
|
{ "burnheight", ActorBurnHeight, RUNTIME_CLASS(AActor) },
|
||||||
|
|
|
@ -1505,3 +1505,4 @@ void A_KillChildren(AActor * self)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -59,9 +59,18 @@ cluster 1
|
||||||
|
|
||||||
map MAP09 "AREA 9: Castle: Programmer's Keep"
|
map MAP09 "AREA 9: Castle: Programmer's Keep"
|
||||||
next MAP10
|
next MAP10
|
||||||
sky1 SKYMNT01 0
|
sky1 SKYMNT02 0
|
||||||
music D_TRIBAL
|
music D_TRIBAL
|
||||||
cluster 1
|
cluster 1
|
||||||
|
// These are the sky changes for the first 8 maps
|
||||||
|
specialaction "Programmer", ACS_Execute, 0, 1, 256
|
||||||
|
specialaction "Programmer", ACS_Execute, 0, 2, 256
|
||||||
|
specialaction "Programmer", ACS_Execute, 0, 3, 256
|
||||||
|
specialaction "Programmer", ACS_Execute, 0, 4, 256
|
||||||
|
specialaction "Programmer", ACS_Execute, 0, 5, 256
|
||||||
|
specialaction "Programmer", ACS_Execute, 0, 6, 256
|
||||||
|
specialaction "Programmer", ACS_Execute, 0, 7, 256
|
||||||
|
specialaction "Programmer", ACS_Execute, 0, 8, 256
|
||||||
|
|
||||||
// It seems that Strife was originally going to print the text
|
// It seems that Strife was originally going to print the text
|
||||||
// from the C1TEXT lump when you move from map 9 to map 10, but
|
// from the C1TEXT lump when you move from map 9 to map 10, but
|
||||||
|
|
Loading…
Reference in a new issue