From 3b477d7022371c84d4bde8b4a98bb81f73430b3e Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Fri, 19 Oct 2007 08:49:02 +0000 Subject: [PATCH] - 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) --- docs/rh-log.txt | 20 ++++++++++++++++++++ src/b_think.cpp | 2 +- src/g_doom/a_revenant.cpp | 10 +++++++++- src/g_heretic/a_hereticweaps.cpp | 3 +++ src/g_shared/a_weapons.cpp | 3 ++- src/g_strife/a_spectral.cpp | 9 ++++++++- src/p_lnspec.cpp | 2 +- src/p_map.cpp | 2 +- src/p_trace.cpp | 8 ++++++++ src/sc_man.cpp | 1 + src/thingdef/thingdef_states.cpp | 4 +++- wadsrc/decorate/doom/doomplayer.txt | 4 ++-- wadsrc/decorate/heretic/hereticplayer.txt | 6 +++--- wadsrc/decorate/strife/strifeplayer.txt | 4 ++++ 14 files changed, 66 insertions(+), 12 deletions(-) diff --git a/docs/rh-log.txt b/docs/rh-log.txt index d765f1372..b069981e2 100644 --- a/docs/rh-log.txt +++ b/docs/rh-log.txt @@ -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) - Fixed: The code that checked hitscans entering an actor from above and below calculated the hit position wrong. diff --git a/src/b_think.cpp b/src/b_think.cpp index 77d2940c0..059876c08 100644 --- a/src/b_think.cpp +++ b/src/b_think.cpp @@ -183,7 +183,7 @@ void DCajunMaster::ThinkForMove (AActor *actor, ticcmd_t *cmd) } //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; } diff --git a/src/g_doom/a_revenant.cpp b/src/g_doom/a_revenant.cpp index ad4000e4f..0ce16f927 100644 --- a/src/g_doom/a_revenant.cpp +++ b/src/g_doom/a_revenant.cpp @@ -104,7 +104,15 @@ void A_Tracer (AActor *self) if (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) self->momz -= FRACUNIT/8; diff --git a/src/g_heretic/a_hereticweaps.cpp b/src/g_heretic/a_hereticweaps.cpp index e1285afa7..3c23368ee 100644 --- a/src/g_heretic/a_hereticweaps.cpp +++ b/src/g_heretic/a_hereticweaps.cpp @@ -1535,6 +1535,9 @@ END_DEFAULTS IMPLEMENT_STATELESS_ACTOR (AGauntletsPowered, Heretic, -1, 0) 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_HoldAtkState (S_GAUNTLETATK2+2) PROP_Weapon_SisterType ("Gauntlets") diff --git a/src/g_shared/a_weapons.cpp b/src/g_shared/a_weapons.cpp index de59ee222..b3deed82b 100644 --- a/src/g_shared/a_weapons.cpp +++ b/src/g_shared/a_weapons.cpp @@ -498,7 +498,8 @@ void AWeapon::EndPowerup () { if (GetReadyState() != SisterWeapon->GetReadyState()) { - if (Owner->player->PendingWeapon == NULL) + if (Owner->player->PendingWeapon == NULL || + Owner->player->PendingWeapon == WP_NOCHANGE) Owner->player->PendingWeapon = SisterWeapon; } else diff --git a/src/g_strife/a_spectral.cpp b/src/g_strife/a_spectral.cpp index 4d024771f..248d6f1cf 100644 --- a/src/g_strife/a_spectral.cpp +++ b/src/g_strife/a_spectral.cpp @@ -350,7 +350,14 @@ void A_Tracer2 (AActor *self) { 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) { self->momz -= FRACUNIT/8; diff --git a/src/p_lnspec.cpp b/src/p_lnspec.cpp index abcf2aaba..f2da090be 100644 --- a/src/p_lnspec.cpp +++ b/src/p_lnspec.cpp @@ -1273,7 +1273,7 @@ FUNC(LS_Thing_Hate) hatee == hater || // can't hate self !(hatee->flags & MF_SHOOTABLE) || // can't hate nonshootable 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))) diff --git a/src/p_map.cpp b/src/p_map.cpp index faa7c5c37..d82a3014e 100644 --- a/src/p_map.cpp +++ b/src/p_map.cpp @@ -4314,7 +4314,7 @@ void PIT_CeilingRaise (AActor *thing) } 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) { diff --git a/src/p_trace.cpp b/src/p_trace.cpp index eba70c36a..6cfcf6bbb 100644 --- a/src/p_trace.cpp +++ b/src/p_trace.cpp @@ -319,6 +319,10 @@ static bool PTR_TraceIterator (intercept_t *in) hitx = trace.x + FixedMul (Vx, dist); hity = trace.y + FixedMul (Vy, 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) { // trace enters below actor @@ -332,6 +336,10 @@ static bool PTR_TraceIterator (intercept_t *in) hitx = trace.x + FixedMul (Vx, dist); hity = trace.y + FixedMul (Vy, 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; } diff --git a/src/sc_man.cpp b/src/sc_man.cpp index b309e9be3..4ed641758 100644 --- a/src/sc_man.cpp +++ b/src/sc_man.cpp @@ -772,6 +772,7 @@ FString SC_TokenName (int token, const char *string) "'^='", "'|='", "'>>'", + "'>>>'", "'<<'", "'++'", "'--'", diff --git a/src/thingdef/thingdef_states.cpp b/src/thingdef/thingdef_states.cpp index 92f0a1f95..9ab6b8a94 100644 --- a/src/thingdef/thingdef_states.cpp +++ b/src/thingdef/thingdef_states.cpp @@ -788,7 +788,9 @@ do_stop: if (JumpParameters.Size()==0) JumpParameters.Push(NAME_None); 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; int scope = statestring.IndexOf("::"); if (scope >= 0) diff --git a/wadsrc/decorate/doom/doomplayer.txt b/wadsrc/decorate/doom/doomplayer.txt index ace1356b2..fcdc1d396 100644 --- a/wadsrc/decorate/doom/doomplayer.txt +++ b/wadsrc/decorate/doom/doomplayer.txt @@ -37,14 +37,14 @@ ACTOR DoomPlayer : PlayerPawn PLAY G 4 A_Pain Goto Spawn Death: - PLAY H 10 A_PlayerSkinCheck(AltSkinDeath) + PLAY H 10 A_PlayerSkinCheck("AltSkinDeath") PLAY I 10 A_PlayerScream PLAY J 10 A_NoBlocking PLAY KLM 10 PLAY N -1 Stop XDeath: - PLAY O 5 A_PlayerSkinCheck(AltSkinXDeath) + PLAY O 5 A_PlayerSkinCheck("AltSkinXDeath") PLAY P 5 A_XScream PLAY Q 5 A_NoBlocking PLAY RSTUV 5 diff --git a/wadsrc/decorate/heretic/hereticplayer.txt b/wadsrc/decorate/heretic/hereticplayer.txt index f3c0ab3ee..fa7dc96e8 100644 --- a/wadsrc/decorate/heretic/hereticplayer.txt +++ b/wadsrc/decorate/heretic/hereticplayer.txt @@ -29,7 +29,7 @@ ACTOR HereticPlayer : PlayerPawn PLAY G 4 A_Pain Goto Spawn Death: - PLAY H 6 A_PlayerSkinCheck(AltSkinDeath) + PLAY H 6 A_PlayerSkinCheck("AltSkinDeath") PLAY I 6 A_PlayerScream PLAY JK 6 PLAY L 6 A_NoBlocking @@ -37,7 +37,7 @@ ACTOR HereticPlayer : PlayerPawn PLAY P -1 Stop XDeath: - PLAY Q 0 A_PlayerSkinCheck(AltSkinXDeath) + PLAY Q 0 A_PlayerSkinCheck("AltSkinXDeath") PLAY Q 5 A_PlayerScream PLAY R 0 A_NoBlocking PLAY R 5 A_SkullPop @@ -99,7 +99,7 @@ ACTOR BloodySkull : PlayerChunk { Spawn: BSKL A 0 - BSKL ABCDE 5 A_CheckFloor(Hit) + BSKL ABCDE 5 A_CheckFloor("Hit") Goto Spawn+1 Hit: BSKL F 16 A_CheckPlayerDone diff --git a/wadsrc/decorate/strife/strifeplayer.txt b/wadsrc/decorate/strife/strifeplayer.txt index 6048e8ade..e93c68043 100644 --- a/wadsrc/decorate/strife/strifeplayer.txt +++ b/wadsrc/decorate/strife/strifeplayer.txt @@ -31,6 +31,10 @@ ACTOR StrifePlayer : PlayerPawn Melee: PLAY F 6 goto Missile + Pain: + PLAY Q 4 + PLAY Q 4 A_Pain + Goto Spawn Death: PLAY H 3 PLAY I 3 A_PlayerScream