by drfrag » Tue May 30, 2017 3:53 am
At least since ZDoom 2.3.1 to GZDoom 3.0.1. When you morph someone into a friendly monster the guy is still friendly after unmorphing, since the friendly flag is ignored you must use changeflag in the see states. In 3.0.1 sometimes the guy stays morphed and plays the pain sound instead. Please see code. To reproduce load morphfriendtest.wad in Heretic and type 'summon artiegg2'. Now i've noticed that may be you were never intended to morph someone into a friendly monster (this decorate code was really old). So not a bug but a feature request then?
Code: Select all
ACTOR ArtiEgg2 : CustomInventory
{
+COUNTITEM
+FLOATBOB
+INVENTORY.INVBAR
+INVENTORY.PICKUPFLASH
+INVENTORY.FANCYPICKUPSOUND
Inventory.Icon "ARTIEGGC"
Inventory.PickupSound "misc/p_pkup"
Inventory.PickupMessage "Alternate Morph Ovum"
Inventory.DefMaxAmount
Tag "$TAG_ARTIEGG"
States
{
Spawn:
EGGC ABCB 6
Loop
Use:
TNT1 A 0 A_FireCustomMissile("EggFX2", -15, 0, 0, 0, 1)
TNT1 A 0 A_FireCustomMissile("EggFX2", -7.5, 0, 0, 0, 1)
TNT1 A 0 A_FireCustomMissile("EggFX2", 0, 0, 0, 0, 1)
TNT1 A 0 A_FireCustomMissile("EggFX2", 7.5, 0, 0, 0, 1)
TNT1 A 0 A_FireCustomMissile("EggFX2", 15, 0, 0, 0, 1)
Stop
}
}
ACTOR EggFX2 : MorphProjectile
{
Radius 8
Height 8
Speed 18
MorphProjectile.MonsterClass "FriendlyBeast"
MorphProjectile.MorphStyle MRF_FULLHEALTH
MorphProjectile.Duration 1000
States
{
Spawn:
EGGM ABCDE 4
Loop
Death:
FX01 F 3 Bright
FX01 FGH 3 Bright
Stop
}
}
ACTOR FriendlyBeast : MorphedMonster
{
Health 220
Radius 32
Height 74
Mass 200
Speed 14
Painchance 100
Monster
+FLOORCLIP
+FRIENDLY // this is ignored
+DROPOFF
+NOBLOCKMONST
-COUNTKILL
SeeSound "beast/sight"
AttackSound "beast/attack"
PainSound "beast/pain"
DeathSound "beast/death"
ActiveSound "beast/active"
Obituary "$OB_BEAST"
States
{
Spawn:
BEAS AB 10 A_Look
Loop
See:
BEAS A 0 // this line can be commented out but must exist
BEAS A 0 A_ChangeFlag("FRIENDLY",1) // hack
BEAS ABCDEF 3 A_Chase
Loop
Melee:
Missile:
BEAS H 10 A_FaceTarget
BEAS I 10 A_CustomComboAttack("BeastBall", 32, random[BeastAttack](1,8)*3, "beast/attack")
Goto See
Pain:
BEAS G 3
BEAS G 3 A_Pain
Goto See
Death:
BEAS R 6
BEAS S 6 A_Scream
BEAS TUV 6
BEAS W 6 A_NoBlocking
BEAS XY 6
BEAS Z -1
Stop
XDeath:
BEAS J 5
BEAS K 6 A_Scream
BEAS L 5
BEAS M 6
BEAS N 5
BEAS O 6 A_NoBlocking
BEAS P 5
BEAS Q -1
Stop
}
}
At least since ZDoom 2.3.1 to GZDoom 3.0.1. When you morph someone into a friendly monster the guy is still friendly after unmorphing, since the friendly flag is ignored you must use changeflag in the see states. In 3.0.1 sometimes the guy stays morphed and plays the pain sound instead. Please see code. To reproduce load morphfriendtest.wad in Heretic and type 'summon artiegg2'. Now i've noticed that may be you were never intended to morph someone into a friendly monster (this decorate code was really old). So not a bug but a feature request then?
[code]
ACTOR ArtiEgg2 : CustomInventory
{
+COUNTITEM
+FLOATBOB
+INVENTORY.INVBAR
+INVENTORY.PICKUPFLASH
+INVENTORY.FANCYPICKUPSOUND
Inventory.Icon "ARTIEGGC"
Inventory.PickupSound "misc/p_pkup"
Inventory.PickupMessage "Alternate Morph Ovum"
Inventory.DefMaxAmount
Tag "$TAG_ARTIEGG"
States
{
Spawn:
EGGC ABCB 6
Loop
Use:
TNT1 A 0 A_FireCustomMissile("EggFX2", -15, 0, 0, 0, 1)
TNT1 A 0 A_FireCustomMissile("EggFX2", -7.5, 0, 0, 0, 1)
TNT1 A 0 A_FireCustomMissile("EggFX2", 0, 0, 0, 0, 1)
TNT1 A 0 A_FireCustomMissile("EggFX2", 7.5, 0, 0, 0, 1)
TNT1 A 0 A_FireCustomMissile("EggFX2", 15, 0, 0, 0, 1)
Stop
}
}
ACTOR EggFX2 : MorphProjectile
{
Radius 8
Height 8
Speed 18
MorphProjectile.MonsterClass "FriendlyBeast"
MorphProjectile.MorphStyle MRF_FULLHEALTH
MorphProjectile.Duration 1000
States
{
Spawn:
EGGM ABCDE 4
Loop
Death:
FX01 F 3 Bright
FX01 FGH 3 Bright
Stop
}
}
ACTOR FriendlyBeast : MorphedMonster
{
Health 220
Radius 32
Height 74
Mass 200
Speed 14
Painchance 100
Monster
+FLOORCLIP
+FRIENDLY // this is ignored
+DROPOFF
+NOBLOCKMONST
-COUNTKILL
SeeSound "beast/sight"
AttackSound "beast/attack"
PainSound "beast/pain"
DeathSound "beast/death"
ActiveSound "beast/active"
Obituary "$OB_BEAST"
States
{
Spawn:
BEAS AB 10 A_Look
Loop
See:
BEAS A 0 // this line can be commented out but must exist
BEAS A 0 A_ChangeFlag("FRIENDLY",1) // hack
BEAS ABCDEF 3 A_Chase
Loop
Melee:
Missile:
BEAS H 10 A_FaceTarget
BEAS I 10 A_CustomComboAttack("BeastBall", 32, random[BeastAttack](1,8)*3, "beast/attack")
Goto See
Pain:
BEAS G 3
BEAS G 3 A_Pain
Goto See
Death:
BEAS R 6
BEAS S 6 A_Scream
BEAS TUV 6
BEAS W 6 A_NoBlocking
BEAS XY 6
BEAS Z -1
Stop
XDeath:
BEAS J 5
BEAS K 6 A_Scream
BEAS L 5
BEAS M 6
BEAS N 5
BEAS O 6 A_NoBlocking
BEAS P 5
BEAS Q -1
Stop
}
}
[/code]