- Fixed: POwered up weapons with a different ready state than their base

weapon didn't change back when the powerup expired.
- Fixed: The powered up version of Heretic's Gauntlets missed the proper
  state assignments for Ready, Lower and Raise.
- Fixed: The Strife player was missing its pain state.
- Fixed: Revenant missiles couldn't home in on targets with a height lower than
  40.
- Fixed: The code which checked for hitscan traces hitting actors from above
  and below must test whether the calculated hit position is actually inside 
  the actor being checked. If it crosses the top/bottom plane outside the
  bounding box there can't be a hit.
- Changed: State labels in code pointer calls must now be enclosed in quotation marks.
  This was done to ensure compatibility with parsers that will parse these as
  identifier-aware script code later.


SVN r554 (trunk)
This commit is contained in:
Christoph Oelckers 2007-10-19 08:49:02 +00:00
parent c81fe8d061
commit 3b477d7022
14 changed files with 66 additions and 12 deletions

View file

@ -1,3 +1,23 @@
October 19, 2007 (Changes by Graf Zahl)
- Fixed: POwered up weapons with a different ready state than their base
weapon didn't change back when the powerup expired.
- Fixed: The powered up version of Heretic's Gauntlets missed the proper
state assignments for Ready, Lower and Raise.
October 17, 2007 (Changes by Graf Zahl)
- Fixed: The Strife player was missing its pain state.
October 12, 2007 (Changes by Graf Zahl)
- Fixed: Revenant missiles couldn't home in on targets with a height lower than
40.
- Fixed: The code which checked for hitscan traces hitting actors from above
and below must test whether the calculated hit position is actually inside
the actor being checked. If it crosses the top/bottom plane outside the
bounding box there can't be a hit.
- Changed: State labels in code pointer calls must now be enclosed in quotation marks.
This was done to ensure compatibility with parsers that will parse these as
identifier-aware script code later.
October 8, 2007 (Changes by Graf Zahl) October 8, 2007 (Changes by Graf Zahl)
- Fixed: The code that checked hitscans entering an actor from above and below - Fixed: The code that checked hitscans entering an actor from above and below
calculated the hit position wrong. calculated the hit position wrong.

View file

@ -183,7 +183,7 @@ void DCajunMaster::ThinkForMove (AActor *actor, ticcmd_t *cmd)
} }
//Strafing. //Strafing.
if (b->enemy->flags & MF3_ISMONSTER) //It's just a monster so take it down cool. if (b->enemy->flags3 & MF3_ISMONSTER) //It's just a monster so take it down cool.
{ {
cmd->ucmd.sidemove = b->sleft ? -SIDEWALK : SIDEWALK; cmd->ucmd.sidemove = b->sleft ? -SIDEWALK : SIDEWALK;
} }

View file

@ -104,7 +104,15 @@ void A_Tracer (AActor *self)
if (dist < 1) if (dist < 1)
dist = 1; dist = 1;
slope = (dest->z+40*FRACUNIT - self->z) / dist;
if (dest->height >= 56*FRACUNIT)
{
slope = (dest->z+40*FRACUNIT - self->z) / dist;
}
else
{
slope = (dest->z + self->height*2/3 - self->z) / dist;
}
if (slope < self->momz) if (slope < self->momz)
self->momz -= FRACUNIT/8; self->momz -= FRACUNIT/8;

View file

@ -1535,6 +1535,9 @@ END_DEFAULTS
IMPLEMENT_STATELESS_ACTOR (AGauntletsPowered, Heretic, -1, 0) IMPLEMENT_STATELESS_ACTOR (AGauntletsPowered, Heretic, -1, 0)
PROP_Weapon_Flags (WIF_WIMPY_WEAPON|WIF_POWERED_UP|WIF_BOT_MELEE) PROP_Weapon_Flags (WIF_WIMPY_WEAPON|WIF_POWERED_UP|WIF_BOT_MELEE)
PROP_Weapon_UpState (S_GAUNTLETUP2)
PROP_Weapon_DownState (S_GAUNTLETDOWN2)
PROP_Weapon_ReadyState (S_GAUNTLETREADY2)
PROP_Weapon_AtkState (S_GAUNTLETATK2) PROP_Weapon_AtkState (S_GAUNTLETATK2)
PROP_Weapon_HoldAtkState (S_GAUNTLETATK2+2) PROP_Weapon_HoldAtkState (S_GAUNTLETATK2+2)
PROP_Weapon_SisterType ("Gauntlets") PROP_Weapon_SisterType ("Gauntlets")

View file

@ -498,7 +498,8 @@ void AWeapon::EndPowerup ()
{ {
if (GetReadyState() != SisterWeapon->GetReadyState()) if (GetReadyState() != SisterWeapon->GetReadyState())
{ {
if (Owner->player->PendingWeapon == NULL) if (Owner->player->PendingWeapon == NULL ||
Owner->player->PendingWeapon == WP_NOCHANGE)
Owner->player->PendingWeapon = SisterWeapon; Owner->player->PendingWeapon = SisterWeapon;
} }
else else

View file

@ -350,7 +350,14 @@ void A_Tracer2 (AActor *self)
{ {
dist = 1; dist = 1;
} }
slope = (dest->z + 40*FRACUNIT - self->z) / dist; if (dest->height >= 56*FRACUNIT)
{
slope = (dest->z+40*FRACUNIT - self->z) / dist;
}
else
{
slope = (dest->z + self->height*2/3 - self->z) / dist;
}
if (slope < self->momz) if (slope < self->momz)
{ {
self->momz -= FRACUNIT/8; self->momz -= FRACUNIT/8;

View file

@ -1273,7 +1273,7 @@ FUNC(LS_Thing_Hate)
hatee == hater || // can't hate self hatee == hater || // can't hate self
!(hatee->flags & MF_SHOOTABLE) || // can't hate nonshootable things !(hatee->flags & MF_SHOOTABLE) || // can't hate nonshootable things
hatee->health <= 0 || // can't hate dead things hatee->health <= 0 || // can't hate dead things
(hatee->flags & MF2_DORMANT)); // can't target dormant things (hatee->flags2 & MF2_DORMANT));
} }
if (hatee != NULL && hatee != hater && (arg2 == 0 || (hater->goal != NULL && hater->target != hater->goal))) if (hatee != NULL && hatee != hater && (arg2 == 0 || (hater->goal != NULL && hater->target != hater->goal)))

View file

@ -4314,7 +4314,7 @@ void PIT_CeilingRaise (AActor *thing)
} }
P_CheckFakeFloorTriggers (thing, oldz); P_CheckFakeFloorTriggers (thing, oldz);
} }
else if ((thing->flags & MF2_PASSMOBJ) && !isgood && thing->z + thing->height < thing->ceilingz) else if ((thing->flags2 & MF2_PASSMOBJ) && !isgood && thing->z + thing->height < thing->ceilingz)
{ {
if (!P_TestMobjZ (thing) && onmobj->z <= thing->z) if (!P_TestMobjZ (thing) && onmobj->z <= thing->z)
{ {

View file

@ -319,6 +319,10 @@ static bool PTR_TraceIterator (intercept_t *in)
hitx = trace.x + FixedMul (Vx, dist); hitx = trace.x + FixedMul (Vx, dist);
hity = trace.y + FixedMul (Vy, dist); hity = trace.y + FixedMul (Vy, dist);
hitz = StartZ + FixedMul (Vz, dist); hitz = StartZ + FixedMul (Vz, dist);
// calculated coordinate is outside the actor's bounding box
if (abs(hitx - in->d.thing->x) > in->d.thing->radius ||
abs(hity - in->d.thing->y) > in->d.thing->radius) return true;
} }
else if (hitz < in->d.thing->z) else if (hitz < in->d.thing->z)
{ // trace enters below actor { // trace enters below actor
@ -332,6 +336,10 @@ static bool PTR_TraceIterator (intercept_t *in)
hitx = trace.x + FixedMul (Vx, dist); hitx = trace.x + FixedMul (Vx, dist);
hity = trace.y + FixedMul (Vy, dist); hity = trace.y + FixedMul (Vy, dist);
hitz = StartZ + FixedMul (Vz, dist); hitz = StartZ + FixedMul (Vz, dist);
// calculated coordinate is outside the actor's bounding box
if (abs(hitx - in->d.thing->x) > in->d.thing->radius ||
abs(hity - in->d.thing->y) > in->d.thing->radius) return true;
} }

View file

@ -772,6 +772,7 @@ FString SC_TokenName (int token, const char *string)
"'^='", "'^='",
"'|='", "'|='",
"'>>'", "'>>'",
"'>>>'",
"'<<'", "'<<'",
"'++'", "'++'",
"'--'", "'--'",

View file

@ -788,7 +788,9 @@ do_stop:
if (JumpParameters.Size()==0) JumpParameters.Push(NAME_None); if (JumpParameters.Size()==0) JumpParameters.Push(NAME_None);
v = -(int)JumpParameters.Size(); v = -(int)JumpParameters.Size();
FString statestring = ParseStateString(); // This forces quotation marks around the state name.
SC_MustGetToken(TK_StringConst);
FString statestring = sc_String; // ParseStateString();
const PClass *stype=NULL; const PClass *stype=NULL;
int scope = statestring.IndexOf("::"); int scope = statestring.IndexOf("::");
if (scope >= 0) if (scope >= 0)

View file

@ -37,14 +37,14 @@ ACTOR DoomPlayer : PlayerPawn
PLAY G 4 A_Pain PLAY G 4 A_Pain
Goto Spawn Goto Spawn
Death: Death:
PLAY H 10 A_PlayerSkinCheck(AltSkinDeath) PLAY H 10 A_PlayerSkinCheck("AltSkinDeath")
PLAY I 10 A_PlayerScream PLAY I 10 A_PlayerScream
PLAY J 10 A_NoBlocking PLAY J 10 A_NoBlocking
PLAY KLM 10 PLAY KLM 10
PLAY N -1 PLAY N -1
Stop Stop
XDeath: XDeath:
PLAY O 5 A_PlayerSkinCheck(AltSkinXDeath) PLAY O 5 A_PlayerSkinCheck("AltSkinXDeath")
PLAY P 5 A_XScream PLAY P 5 A_XScream
PLAY Q 5 A_NoBlocking PLAY Q 5 A_NoBlocking
PLAY RSTUV 5 PLAY RSTUV 5

View file

@ -29,7 +29,7 @@ ACTOR HereticPlayer : PlayerPawn
PLAY G 4 A_Pain PLAY G 4 A_Pain
Goto Spawn Goto Spawn
Death: Death:
PLAY H 6 A_PlayerSkinCheck(AltSkinDeath) PLAY H 6 A_PlayerSkinCheck("AltSkinDeath")
PLAY I 6 A_PlayerScream PLAY I 6 A_PlayerScream
PLAY JK 6 PLAY JK 6
PLAY L 6 A_NoBlocking PLAY L 6 A_NoBlocking
@ -37,7 +37,7 @@ ACTOR HereticPlayer : PlayerPawn
PLAY P -1 PLAY P -1
Stop Stop
XDeath: XDeath:
PLAY Q 0 A_PlayerSkinCheck(AltSkinXDeath) PLAY Q 0 A_PlayerSkinCheck("AltSkinXDeath")
PLAY Q 5 A_PlayerScream PLAY Q 5 A_PlayerScream
PLAY R 0 A_NoBlocking PLAY R 0 A_NoBlocking
PLAY R 5 A_SkullPop PLAY R 5 A_SkullPop
@ -99,7 +99,7 @@ ACTOR BloodySkull : PlayerChunk
{ {
Spawn: Spawn:
BSKL A 0 BSKL A 0
BSKL ABCDE 5 A_CheckFloor(Hit) BSKL ABCDE 5 A_CheckFloor("Hit")
Goto Spawn+1 Goto Spawn+1
Hit: Hit:
BSKL F 16 A_CheckPlayerDone BSKL F 16 A_CheckPlayerDone

View file

@ -31,6 +31,10 @@ ACTOR StrifePlayer : PlayerPawn
Melee: Melee:
PLAY F 6 PLAY F 6
goto Missile goto Missile
Pain:
PLAY Q 4
PLAY Q 4 A_Pain
Goto Spawn
Death: Death:
PLAY H 3 PLAY H 3
PLAY I 3 A_PlayerScream PLAY I 3 A_PlayerScream