Mewdoom Posted September 19, 2016 Hello guys, I try to modify the Archvile with afrit hellfire. It work fine but I want to fix two bugs and I dont see how to fix them. I notice when the archvile is just beside a wall that have a top floor, the fire may appear on top of that floor and fall down the wall beside. Does projectile supposed to explode when hitting a Wall ? I suspect maybe that is because of the spawning offsett of the hellfire ... The other bug is, when archvile is in the fire, he get stuck, cannot walk until the fire disapear. I try to use -SOLID flag on hellfire, no luck. //=========================================================================== // // Arch Vile // //=========================================================================== ACTOR New_Archvile replaces Archvile { Health 700 Radius 20 Height 56 Mass 500 Speed 15 PainChance 10 PainChance "HellFire", 0 Damagefactor "HellFire", 0.0 Monster +AvoidMelee MaxTargetRange 896 +QUICKTORETALIATE +FLOORCLIP +NOTARGET SeeSound "vile/sight" PainSound "vile/pain" DeathSound "vile/death" ActiveSound "vile/active" //MeleeSound "vile/stop" Obituary "$OB_VILE" States { Spawn: VILE AB 10 A_Look Loop See: VILE AABBCCDDEEFF 2 A_VileChase Loop Missile: VILE G 0 BRIGHT A_VileStart VILE G 10 BRIGHT A_FaceTarget VILE H 0 BRIGHT A_CustomMissile("Archvile_HellFire", 44) VILE H 8 BRIGHT A_CustomMissile("Archvile_HellFire", 44) VILE IJKLMN 8 BRIGHT A_FaceTarget VILE O 8 BRIGHT //A_VileTarget("New_ArchvileFire") VILE P 20 BRIGHT Goto See Heal: VILE "[\]" 10 BRIGHT Goto See Pain: VILE Q 5 VILE Q 5 A_Pain Goto See Death: VILE Q 7 VILE R 7 A_Scream VILE S 7 A_NoBlocking VILE TUVWXY 7 VILE Z -1 Stop } } Actor Archvile_HellFire { +NoBlockMap +Painless +BloodlessImpact //+NoExplodeFloor +Missile +DropOff States { Spawn: TNT1 A 1 Loop Death: TNT1 A 0 Bright A_CustomMissile("Archvile_HellFire1", 0, 0, -180) TNT1 A 0 Bright A_CustomMissile("Archvile_HellFire1", 0, 16, -175) TNT1 A 0 Bright A_CustomMissile("Archvile_HellFire1", 0, 32, -170) TNT1 A 0 Bright A_CustomMissile("Archvile_HellFire1", 0, -16, -185) TNT1 A 0 Bright A_CustomMissile("Archvile_HellFire1", 0, -32, -190) TNT1 A 10 Bright A_PlaySound("Afrit/Hellfire") Stop } } Actor Archvile_HellFire1 { +Ripper +NoExplodeFloor +Painless +BloodlessImpact +Missile +DropOff Speed 2 States { Spawn: TNT1 A 10 A_CustomMissile("Archvile_HellFire2", 0, 0, 0) TNT1 A 10 A_CustomMissile("Archvile_HellFire2", 0, 16, 0) TNT1 A 10 A_CustomMissile("Archvile_HellFire2", 0, -16, 0) TNT1 A 10 A_CustomMissile("Archvile_HellFire2", 0, 0, 0) TNT1 A 10 A_CustomMissile("Archvile_HellFire2", 0, 16, 0) TNT1 A 10 A_CustomMissile("Archvile_HellFire2", 0, -16, 0) TNT1 A 10 A_CustomMissile("Archvile_HellFire2", 0, 0, 0) TNT1 A 10 A_CustomMissile("Archvile_HellFire2", 0, 16, 0) TNT1 A 10 A_CustomMissile("Archvile_HellFire2", 0, -16, 0) TNT1 A 10 A_CustomMissile("Archvile_HellFire2", 0, 0, 0) TNT1 A 10 A_CustomMissile("Archvile_HellFire2", 0, 16, 0) TNT1 A 10 A_CustomMissile("Archvile_HellFire2", 0, -16, 0) TNT1 A 10 A_CustomMissile("Archvile_HellFire2", 0, 0, 0) TNT1 A 10 A_CustomMissile("Archvile_HellFire2", 0, 16, 0) TNT1 A 10 A_CustomMissile("Archvile_HellFire2", 0, -16, 0) Stop } } Actor Archvile_HellFire2 { +Ripper +NoExplodeFloor +BloodlessImpact +DropOff +Randomize Scale 1.5 Speed 1 RenderStyle Add Alpha 0.67 Damagetype "HellFire" Obituary "%o was scorched by an Archvile" States { Spawn: TNT1 A 8 FRTF A 3 Bright FRTF BC 3 Bright A_Explode(2, 64) TNT1 A 0 A_Explode(2, 64) TNT1 A 0 A_Jump(191, 4) TNT1 A 0 A_CustomMissile("Archvile_HellFire2", 0, 24, 0) TNT1 A 0 A_CustomMissile("Archvile_HellFire2", 0, 0, 0) TNT1 A 0 A_CustomMissile("Archvile_HellFire2", 0, -24, 0) FRTF DEFGHIJKLMNO 3 Bright Stop } } //=========================================================================== // // Arch Vile Fire // //=========================================================================== ACTOR New_ArchvileFire { RenderStyle Add Alpha 1 Projectile +RANDOMIZE +SEEKERMISSILE // Tracer pointer States { Spawn: TNT1 A 0 BRIGHT A_RearrangePointers (AAPTR_TRACER, AAPTR_DEFAULT, AAPTR_TARGET, 0) TNT1 A 0 BRIGHT A_CustomMissile("Archvile_HellFireBurn", 0, 0, 0, CMF_AIMDIRECTION, 0, AAPTR_TARGET) TNT1 A 0 BRIGHT A_RearrangePointers (AAPTR_TRACER, AAPTR_DEFAULT, AAPTR_TARGET, 0) Stop } } Actor Archvile_HellFireBurn { +NoBlockMap +Painless +BloodlessImpact +Missile +DropOff States { Spawn: TNT1 A 1 Loop Death: TNT1 A 0 Bright A_CustomMissile("Archvile_HellFire1", 0, 0, -180) TNT1 A 0 Bright A_CustomMissile("Archvile_HellFire1", 0, 16, -175) TNT1 A 0 Bright A_CustomMissile("Archvile_HellFire1", 0, 32, -170) TNT1 A 0 Bright A_CustomMissile("Archvile_HellFire1", 0, -16, -185) TNT1 A 0 Bright A_CustomMissile("Archvile_HellFire1", 0, -32, -190) TNT1 A 10 Bright A_PlaySound("Afrit/Hellfire") Stop } } 0 Share this post Link to post
scifista42 Posted September 19, 2016 Mewdoom said:I notice when the archvile is just beside a wall that have a top floor, the fire may appear on top of that floor and fall down the wall beside. Does projectile supposed to explode when hitting a Wall ? I suspect maybe that is because of the spawning offsett of the hellfire ... The spawning offsets, and the NoExplodeFloor flag (which makes the missile not explode upon hitting a floor), are both doing it.Mewdoom said:The other bug is, when archvile is in the fire, he get stuck, cannot walk until the fire disapear. Try giving NoBlockMap flag to all of the fire actors, including Archvile_HellFire1 and Archvile_HellFire2. Also, I'm not sure if it's a good idea to let Archvile_HellFire2 spawn more instances of itself. 0 Share this post Link to post
Mewdoom Posted September 19, 2016 I found the solution :) for the fire that fall from high ceiling, I put +Missille on the Archvile_HellFire2, when hit a wall, it die. for the wakling bug, it seem that was the A_Explode cause him to be blocked, so I just make the damage more simple by adding Damage property in the Archvile_HellFire2 I just have one other bug, when he attack other monsters, like the zombieman, the zombieman constanly stay on pain and the sound if is pain state loop constanly while is he stuck in fire. It is very annoying. I would like to fire to damage other monsters but without the loop of the sound constanly. 0 Share this post Link to post
scifista42 Posted September 19, 2016 The Zombieman simply has a high pain chance, I guess you'd have to edit him to have lesser pain chance for the fire's damage type (PainChance damagetype, value). 0 Share this post Link to post
Mewdoom Posted September 19, 2016 That strange because I add this and the zombieMan is still in pain ... ACTOR New_ZombieMan : ZombieMan replaces ZombieMan { PainChance "HellFire", 0 Damagefactor "HellFire", 0.0 } 0 Share this post Link to post
scifista42 Posted September 19, 2016 From one of your previous threads, I remember you were already replacing the Zombieman with another actor. If that's so, you should modify that actor, not make yet another one, because there can only be one actor to replace an existing one. If that's not the case, I don't know what the problem is, sorry. 0 Share this post Link to post
Mewdoom Posted September 19, 2016 Yes I checked that :) is is very strange, because PainChance 0 work but not: PainChance "HellFire", 0 Could it be a bug ? I use zdoom 2.8.1 0 Share this post Link to post
scifista42 Posted September 19, 2016 Seems like the fire's effective DamageType isn't really "HellFire". Try setting DamageType "HellFire" to all the fire's actors that are missiles, even those that don't deal any damage (because they might still be causing pain upon impact). 0 Share this post Link to post
Mewdoom Posted September 19, 2016 I found the bug, that's because the hellfire actor's use lot of missile and one of the defined actor didnt have the +painless flag :) now everything work just fine. thankks for your help :) if this topic can be usefull for someone that have the same problem .. I wonder how the vile attack work ? My script doest make fire appear while the player is on upper ceilling ? It work fine if the player is on the same floor as the archvile.. 0 Share this post Link to post
scifista42 Posted September 19, 2016 Mewdoom said:I wonder how the vile attack work ? Assuming you're still using the same code that you've posted in the OP, New_Archvile fires Archvile_HellFire, which then falls onto the ground, dies and spawns Archvile_HellFire1, which then spawns Archvile_HellFire2. So, if no fire appears, the problem has to be that Archvile_HellFire never falls onto the ground for some reason. 0 Share this post Link to post
Mewdoom Posted September 19, 2016 I found the bug, but I dont know how to fix it. By addind +Missile flag it prevent the fire to appear up ceiling and fall down when archvile is just beside a wall. But it also prevent the fire to appear if the target is on a small platform with a wall beside. The missile explode when hitting a wall but how to make it enter in death state when hit high ceilling but not wall 0 Share this post Link to post
Empyre Posted September 20, 2016 You could put a block-monsters line far enough from the wall to keep the monster from getting too close to the wall. That's more of a work-around than a fix, though, and it makes the monster work as intended only on maps made for it, or maps that don't use high floors as walls. 0 Share this post Link to post
Mewdoom Posted September 20, 2016 I found a trick, I keep the missile flag so it explode hitting walls and I check in the deatch state if is on floor and jump back to spawn :) Death: TNT1 A 0 A_CheckFloor("Spawn") 0 Share this post Link to post
Mewdoom Posted September 20, 2016 I have another idea in mind. I notice that custommissile (because of the Vile_Target) is spawning in the front of the player and with the custommissile function we just have the choice of changing horizontal offset and I still dont get what the angle param do exactly, I change it to 0 or whatever and the fire spawn at the same place. I would like to make a circle of fire around the player with custommissile, but how to do it if we just have the horizontal and height param ? 0 Share this post Link to post
Mewdoom Posted September 20, 2016 I got the idea to use A_SpawnItemEx to spawn a bunch of dummy item actor all around the player to make the circle and then each of them will shoot the projectile of fire. I dont understand why, the fire just appear when I use the loop (but the engine become unstable) if I use Stop, nothing appear. my calling of the dummy item: TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -64, 0, 0, 0, 0, 0) Actor Archvile_DamageSpawn { States { Spawn: TNT1 A 0 TNT1 A 6 Bright A_CustomMissile("Archvile_HellFireBurn1", 0, 16, -175) Stop // If I use Loop it appear .... } } 0 Share this post Link to post
Empyre Posted September 20, 2016 A_CustomMissile is for monsters. For players, use A_FireCustomMissile. 0 Share this post Link to post
Mewdoom Posted September 20, 2016 Thanks I will try that :) I still dont understand because all the script use lot of custommissile in actors that arent monsters and it work.. And If I use that: TNT1 A 6 Bright A_CustomMissile("SoulSphere", 0, 16, -175) instead of TNT1 A 6 Bright A_CustomMissile("Archvile_HellFireBurn1", 0, 16, -175) the soulsphere appear .... and Archvile_HellFireBurn1 should working fine because If I call it from the other actor where I call SpawnItemEx, it work just fine. I fixed it :) here is the complete script if anyone want to use this modified archvile.. just use it with the same arcvile sprites in doom2 and just copy the sprite of fire and the sound of fire into your wad. The improvement: 1. make a circle of fire around the player instead of raise him in the air with the original flame. 2. Have two attack near him of flame, one that just around him and the second that is trying to reach his target at the speed of 20. //=========================================================================== // // Arch Vile // //=========================================================================== ACTOR New_Archvile replaces Archvile { Health 700 Radius 20 Height 56 Mass 500 Speed 15 PainChance 10 PainChance "HellFire", 0 Damagefactor "HellFire", 0.0 Monster +AvoidMelee MaxTargetRange 896 +QUICKTORETALIATE +FLOORCLIP +NOTARGET SeeSound "vile/sight" PainSound "vile/pain" DeathSound "vile/death" ActiveSound "vile/active" //MeleeSound "vile/stop" Obituary "$OB_VILE" States { Spawn: VILE AB 10 A_Look Loop See: VILE AABBCCDDEEFF 2 A_VileChase Loop Missile: VILE G 0 BRIGHT A_VileStart VILE H 0 BRIGHT A_CustomMissile("Archvile_HellFire", 44) VILE H 0 BRIGHT A_Jump(128, 2) VILE H 0 BRIGHT A_CustomMissile("Archvile_MeleeFire", 44) VILE G 20 BRIGHT A_FaceTarget // Debout les 2 bras en l'air //VILE H 0 BRIGHT A_CustomMissile("Archvile_MeleeFire", 44) //VILE G 20 BRIGHT A_FaceTarget // Debout les 2 bras en l'air VILE IJKLMN 8 BRIGHT A_FaceTarget VILE O 8 BRIGHT A_VileTarget("New_ArchvileFire") VILE P 20 BRIGHT A_Playsound("weapons/rocklx") Goto See Heal: VILE "[\]" 10 BRIGHT Goto See Pain: VILE Q 5 VILE Q 5 A_Pain Goto See Death: VILE Q 7 VILE R 7 A_Scream VILE S 7 A_NoBlocking VILE TUVWXY 7 VILE Z -1 Stop } } Actor Archvile_MeleeFire { +NoBlockMap +Painless +BloodlessImpact +Missile +DropOff Speed 15 States { Spawn: TNT1 A 1 Loop Death: TNT1 A 0 Bright A_CustomMissile("Archvile_HellFire1", 0, 0, -180) TNT1 A 0 Bright A_CustomMissile("Archvile_HellFire1", 0, 16, -175) TNT1 A 0 Bright A_CustomMissile("Archvile_HellFire1", 0, 32, -170) TNT1 A 0 Bright A_CustomMissile("Archvile_HellFire1", 0, -16, -185) TNT1 A 0 Bright A_CustomMissile("Archvile_HellFire1", 0, -32, -190) TNT1 A 10 Bright A_PlaySound("Afrit/Hellfire") Stop } } Actor Archvile_HellFire { +NoBlockMap +Painless +BloodlessImpact +Missile +DropOff States { Spawn: TNT1 A 1 Loop Death: TNT1 A 0 Bright A_CustomMissile("Archvile_HellFire1", 0, 0, -180) TNT1 A 0 Bright A_CustomMissile("Archvile_HellFire1", 0, 16, -175) TNT1 A 0 Bright A_CustomMissile("Archvile_HellFire1", 0, 32, -170) TNT1 A 0 Bright A_CustomMissile("Archvile_HellFire1", 0, -16, -185) TNT1 A 0 Bright A_CustomMissile("Archvile_HellFire1", 0, -32, -190) TNT1 A 10 Bright A_PlaySound("Afrit/Hellfire") Stop } } Actor Archvile_HellFire1 { +Ripper +NoExplodeFloor +Painless +BloodlessImpact +Missile +DropOff Speed 2 States { Spawn: TNT1 A 10 A_CustomMissile("Archvile_HellFire2", 0, 0, 0) TNT1 A 10 A_CustomMissile("Archvile_HellFire2", 0, 16, 0) TNT1 A 10 A_CustomMissile("Archvile_HellFire2", 0, -16, 0) TNT1 A 10 A_CustomMissile("Archvile_HellFire2", 0, 0, 0) TNT1 A 10 A_CustomMissile("Archvile_HellFire2", 0, 16, 0) TNT1 A 10 A_CustomMissile("Archvile_HellFire2", 0, -16, 0) TNT1 A 10 A_CustomMissile("Archvile_HellFire2", 0, 0, 0) TNT1 A 10 A_CustomMissile("Archvile_HellFire2", 0, 16, 0) TNT1 A 10 A_CustomMissile("Archvile_HellFire2", 0, -16, 0) TNT1 A 10 A_CustomMissile("Archvile_HellFire2", 0, 0, 0) TNT1 A 10 A_CustomMissile("Archvile_HellFire2", 0, 16, 0) TNT1 A 10 A_CustomMissile("Archvile_HellFire2", 0, -16, 0) TNT1 A 10 A_CustomMissile("Archvile_HellFire2", 0, 0, 0) TNT1 A 10 A_CustomMissile("Archvile_HellFire2", 0, 16, 0) TNT1 A 10 A_CustomMissile("Archvile_HellFire2", 0, -16, 0) Stop } } Actor Archvile_HellFire2 { +Ripper +NoExplodeFloor +Painless +BloodlessImpact +DropOff +Randomize Gravity 9999 +Missile Scale 1.5 Speed 1 RenderStyle Add Alpha 0.5 States { Spawn: TNT1 A 8 A_ScaleVelocity(-2.95) FRTF A 3 Bright FRTF BC 3 Bright //A_Explode(2, 0) TNT1 A 0 //A_Explode(2, 64) TNT1 A 0 A_Jump(191, 4) TNT1 A 0 A_CustomMissile("Archvile_HellFire2", 0, 24, 0) TNT1 A 0 A_CustomMissile("Archvile_HellFire2", 0, 0, 0) TNT1 A 0 A_CustomMissile("Archvile_HellFire2", 0, -24, 0) FRTF DEFGHIJKLMNO 3 Bright TNT1 A 0 A_Jump(100, 2) TNT1 A 0 A_CustomMissile("Archvile_HellFireDamage", 0, 0, 0) TNT1 A 0 Stop Death: TNT1 A 0 A_CheckFloor("Spawn") Stop } } Actor Archvile_HellFireDamage { +Ripper +NoExplodeFloor +BloodlessImpact +DropOff +Missile Speed 1 Damage 1 Damagetype "HellFire" Obituary "%o was scorched by an Archvile" States { Spawn: FRTF D 0 Stop } } //=========================================================================== // // Arch Vile Fire // //=========================================================================== ACTOR New_ArchvileFire { RenderStyle Add Alpha 1 Projectile +RANDOMIZE +PAINLESS +SEEKERMISSILE // Tracer pointer States { Spawn: TNT1 A 0 BRIGHT A_RearrangePointers (AAPTR_TRACER, AAPTR_DEFAULT, AAPTR_TARGET, 0) TNT1 A 0 BRIGHT A_CustomMissile("Archvile_HellFireBurn", 44, 0, 0, CMF_AIMDIRECTION, 0, AAPTR_TARGET) TNT1 A 0 BRIGHT A_RearrangePointers (AAPTR_TRACER, AAPTR_DEFAULT, AAPTR_TARGET, 0) Stop } } Actor Archvile_DamageSpawn { +NoBlockMap +Painless +BloodlessImpact +Missile +DropOff States { Spawn: TNT1 A 1 Loop Death: TNT1 A 10 Bright A_CustomMissile("Archvile_HellFireBurnDamage", 0, 0, 0) TNT1 A 10 Bright A_CustomMissile("Archvile_HellFireBurnDamage", 0, 0, 0) TNT1 A 10 Bright A_CustomMissile("Archvile_HellFireBurnDamage", 0, 0, 0) TNT1 A 10 Bright A_CustomMissile("Archvile_HellFireBurnDamage", 0, 0, 0) Stop } } Actor Archvile_HellFireBurn { +NoBlockMap +Painless +BloodlessImpact +Missile +DropOff States { Spawn: TNT1 A 1 Loop Death: TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -64, 0, 0, 0, 0, 0) TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -64, 0, 0, 0, 0, 45) TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -64, 0, 0, 0, 0, 90) TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -64, 0, 0, 0, 0, 135) TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -64, 0, 0, 0, 0, 180) TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -64, 0, 0, 0, 0, 225) TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -64, 0, 0, 0, 0, 270) TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -64, 0, 0, 0, 0, 315) TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -32, 0, 0, 0, 0, 0) TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -32, 0, 0, 0, 0, 45) TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -32, 0, 0, 0, 0, 90) TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -32, 0, 0, 0, 0, 135) TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -32, 0, 0, 0, 0, 180) TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -32, 0, 0, 0, 0, 225) TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -32, 0, 0, 0, 0, 270) TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -32, 0, 0, 0, 0, 315) TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -16, 0, 0, 0, 0, 0) TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -16, 0, 0, 0, 0, 45) TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -16, 0, 0, 0, 0, 90) TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -16, 0, 0, 0, 0, 135) TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -16, 0, 0, 0, 0, 180) TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -16, 0, 0, 0, 0, 225) TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -16, 0, 0, 0, 0, 270) TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -16, 0, 0, 0, 0, 315) TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -8, 0, 0, 0, 0, 0) TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -8, 0, 0, 0, 0, 45) TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -8, 0, 0, 0, 0, 90) TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -8, 0, 0, 0, 0, 135) TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -8, 0, 0, 0, 0, 180) TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -8, 0, 0, 0, 0, 225) TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -8, 0, 0, 0, 0, 270) TNT1 A 0 Bright A_SpawnItemEx ("Archvile_DamageSpawn", 0, -8, 0, 0, 0, 0, 315) TNT1 A 10 Bright A_PlaySound("Afrit/Hellfire") Stop } } Actor Archvile_HellFireBurnDamage { +Ripper +NoExplodeFloor +Painless +BloodlessImpact +DropOff +Randomize +Missile Gravity 9999 Scale 1.5 Speed 1 RenderStyle Add Alpha 0.5 States { Spawn: TNT1 A 8 A_ScaleVelocity(-2.95) FRTF A 3 Bright A_Explode(2, 64) TNT1 A 0 A_Jump(191, 4) TNT1 A 0 A_CustomMissile("Archvile_HellFireBurnDamage", 0, 16, 0) TNT1 A 0 A_CustomMissile("Archvile_HellFireBurnDamage", 0, 0, 0) TNT1 A 0 A_CustomMissile("Archvile_HellFireBurnDamage", 0, -16, 0) FRTF DEFGHIJKLMNO 3 Bright TNT1 A 0 A_Jump(100, 2) TNT1 A 0 A_CustomMissile("Archvile_HellFireDamage2", 0, 0, 0) TNT1 A 0 Stop Death: TNT1 A 0 A_CheckFloor("Spawn") Stop } } Actor Archvile_HellFireDamage2 { +Ripper +NoExplodeFloor +BloodlessImpact +DropOff +Missile Speed 1 Damage 2 Damagetype "HellFire" Obituary "%o was scorched by an Archvile" States { Spawn: FRTF D 0 Stop } } 0 Share this post Link to post
Empyre Posted September 20, 2016 I misunderstood and thought you wanted the player to surround himself with fire as an attack. A_CustomMissile is for anything that is not a player, not only monsters. If you want a player to fire a custom missile, you use A_FireCustomMissile instead. 0 Share this post Link to post
Mewdoom Posted September 20, 2016 I still dont understand how it work for that part. Why if I remove all the flags and put the custommissile into spawn, it doesnt work ? I understand why it is work with the flag missile with the death state, because when a missile enter into something it explode and then enter in death state. But there is a way to write that part more simple ? Actor Archvile_DamageSpawn { +NoBlockMap +Painless +BloodlessImpact +Missile +DropOff States { Spawn: TNT1 A 1 Loop Death: TNT1 A 10 Bright A_CustomMissile("Archvile_HellFireBurnDamage", 0, 0, 0) TNT1 A 10 Bright A_CustomMissile("Archvile_HellFireBurnDamage", 0, 0, 0) TNT1 A 10 Bright A_CustomMissile("Archvile_HellFireBurnDamage", 0, 0, 0) TNT1 A 10 Bright A_CustomMissile("Archvile_HellFireBurnDamage", 0, 0, 0) Stop } } 0 Share this post Link to post
scifista42 Posted September 20, 2016 Mewdoom said:Why if I remove all the flags and put the custommissile into spawn, it doesnt work ? Can you post the code where you "remove all the flags and put the custommissile into spawn" that doesn't work? 0 Share this post Link to post
Mewdoom Posted September 20, 2016 Sure :) here it is: Actor Archvile_DamageSpawn { States { Spawn: TNT1 A 10 Bright A_CustomMissile("Archvile_HellFireBurnDamage", 0, 0, 0) TNT1 A 10 Bright A_CustomMissile("Archvile_HellFireBurnDamage", 0, 0, 0) TNT1 A 10 Bright A_CustomMissile("Archvile_HellFireBurnDamage", 0, 0, 0) TNT1 A 10 Bright A_CustomMissile("Archvile_HellFireBurnDamage", 0, 0, 0) Stop } } Note: If I put "Soulsphere" instead of Archivile_HellFireBurnDamage, the soulsphere appear ... Maybe I miss something with States, how it work .. 0 Share this post Link to post
scifista42 Posted September 20, 2016 NoBlockMap flag is necessary to make it spawn in a place that is already occupied by another thing. Also, once again, the very first state in Spawn doesn't execute its action, so that you are actually calling A_CustomMissile only 3 times, not 4 times. 0 Share this post Link to post
Mewdoom Posted September 20, 2016 Understood, I just put the example but I also try with TNT1 A 0 as first state and still doesnt work. I will try with noblockmap :) I dont catch because if its the 1st spawn, why it need noblockmap to work ? the soulsphere appear with noblockmap flag .... 0 Share this post Link to post
scifista42 Posted September 20, 2016 Give NoBlockMap flag to Archvile_HellFireBurnDamage (the thing that's being spawned by Archvile_DamageSpawn). 0 Share this post Link to post
Mewdoom Posted September 20, 2016 Thanks I will try it later when I get back to home :) I wonder, how I could make the fire appear when archvile just walking ? I put the A_CustomMissile("Archvile_HellFire", 44) into see state, but nothing happen ?? And I put the TNT1 A 0 on the first line too... 0 Share this post Link to post
scifista42 Posted September 20, 2016 Can you post the whole See state of the New_Archvile? Also, the action-less state wouldn't matter in this case, because it only matters in the very first entering of the very first state immediately after the actor is spawned. Even if his very first state is re-entered later, for example via looping Spawn state, the state will actually execute its action in later calls - just not the very first time it's entered. 0 Share this post Link to post
Mewdoom Posted September 20, 2016 Sure, here it is :) Obituary "$OB_VILE" States { Spawn: VILE AB 10 A_Look Loop See: VILE A 2 VILE A 2 A_CustomMissile("Archvile_HellFire", 44) VILE BBCCDDEEFF 2 A_VileChase Loop 0 Share this post Link to post
scifista42 Posted September 20, 2016 Are you sure that firing "Archvile_HellFire" actually works within the "Missile" state too? Couldn't it be that only the "Archvile_MeleeFire" works, due to having a speed (therefore hitting something by moving into it)? What if you fire "Archvile_MeleeFire" instead of "Archvile_HellFire", respectively give a speed to "Archvile_HellFire"? What if you try number "44.0" instead of "44" (as 44 might actually mean 44/65536 map units above the ground, not 44 map units above the ground)? 0 Share this post Link to post
Mewdoom Posted September 20, 2016 Yes I am absolutely sure, I test it many times by making them in comment with // each of them to test it independently :) I found something interesting, if there is an enemy, because I spawn it friendly to test it, the fire appear, I think it have to do with target pointer... That may be the cause, since its a missile so there must be a target .. 0 Share this post Link to post
scifista42 Posted September 20, 2016 Actually (and somewhat counter-intuitively), a missile's target is the actor who fired the missile (if it was fired by A_CustomMissile or another specifically projectile-firing function, but not if it was fired by a generic actor spawning function like A_SpawnItemEx). EDIT:Mewdoom said:I spawn it friendly to test it, Yeah, that explains why the fire doesn't spawn - the monster has no target yet, therefore A_CustomMissile wouldn't fire anything. The CMF_AIMDIRECTION flag for A_CustomMissile should allow firing missiles without having a target. In fact, you should make the custom fire spawners use the flag too in their calls of A_CustomMissile. 0 Share this post Link to post