I don't know if this is considered a bug. Or if there is a reason why it works this way.
But when I spawn a "RandomSpawner" through a "A_SpawnitemEx", the ambush flag from the replaced ACTOR is gone. Even if I use "SXF_TRANSFERAMBUSHFLAG".
Both work separately.
When I used only RandomSpawner everything was fine. Or if I spawn the ACTOR of the enemy through A_SpawnitemEx using SXF_TRANSFERAMBUSHFLAG, that works too.
Here's an example what I'm trying to do with it(from a DECORATE):
ACTOR ZombiemanReplacer replaces Zombieman
{
states
{
Spawn:
POSS A 0
Goto Scripted
Scripted:
POSS A 0 A_JumpIf(CallACS("CH_ZombieReplacer") == 0, "Off") //Replacers Off
POSS A 0 A_JumpIf(CallACS("CH_ZombieReplacer") == 1, "On") //Default
POSS A 0 A_JumpIf(CallACS("CH_ZombieReplacer") == 2, "More") //Replacers more frequent
POSS A 0 A_JumpIf(CallACS("CH_ZombieReplacer") == 3, "ReplOnly") //Replacers Only
POSS A 0
Goto On
Off:
POSS A 0 A_SpawnitemEx("Zombieman2",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_TRANSFERSPECIAL|SXF_TRANSFERAMBUSHFLAG) //Replacers Off
stop
On:
POSS A 0 A_SpawnitemEx("ZombiemanDefault",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_TRANSFERSPECIAL|SXF_TRANSFERAMBUSHFLAG) //Default
stop
More:
POSS A 0 A_SpawnitemEx("ZombiemanFrequent",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_TRANSFERSPECIAL|SXF_TRANSFERAMBUSHFLAG) //Replacers more frequent
stop
ReplOnly:
POSS A 0 A_SpawnitemEx("ZombiemanReplacers",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_TRANSFERSPECIAL|SXF_TRANSFERAMBUSHFLAG) //Replacers Only
stop
}
}
ACTOR ZombiemanDefault: RandomSpawner //Default
{
DropItem "Zombieman2" 255, 2
DropItem "ZombiemanReplacers" 255, 1
}
ACTOR ZombiemanFrequent: RandomSpawner //Replacers more frequent
{
DropItem "Zombieman2" 255, 1
DropItem "ZombiemanReplacers" 255, 5
}
ACTOR ZombiemanReplacers : RandomSpawner
{
DropItem "FemaleZombie" 255, 60
DropItem "FemalePlasma" 255, 30
DropItem "ChainsawZombie" 255, 10
DropItem "Machinegunguy" 255, 50
DropItem "SmallRat" 255, 1
DropItem "KamikaziGuy" 255, 3
DropItem "ScienceDrop" 255, 18
}
ACTOR ScienceDrop : RandomSpawner
{
DropItem "FemaleScientist" 255, 5
DropItem "FemaleScientist4" 255, 4
DropItem "ZombieScientist" 255, 5
DropItem "ZombieScientist2" 255, 5
DropItem "T667TWO_Zombie" 255, 3
DropItem "HazmatZombie" 255, 4
DropItem "SegwayZombie" 255, 1
DropItem "ZombieScientistPlasma" 255, 5
DropItem "ZombieScientistHeadless" 255, 4
DropItem "FemaleScientist2" 255, 5
DropItem "FemaleScientist3" 255, 5
DropItem "ZombieScientist3" 255, 5
DropItem "ZombieScientist4" 255, 4
DropItem "StealthFighter" 255, 3
}
Yes, I'm asking because I really would love to get it to work this way on my project.
But also if that could be fixed(again... if it is a bug, and there's no intended reason why it works that way.), it would make doing these kind of options for different spawning settings(especially random) so much simpler for everyone.
Here's a video of the spawning working as I intended, and the problem with the Ambush FLAG:
Either way... Thank you for everything you've done for GZDOOM over the years. It is the best!
EDIT:
+BossDeath doesn't seem to transfer either. (using the same type of A_SpawnItemEx + RandomSpawner combination)
If I've understood correctly that is the one needed for things like E1M8. Kill the barons to trigger tag 666.
Or maybe the +BossDeath transfers fine. But GZDOOM doesn't count them as Barons anymore. Because "replaces Baronofhell" is not in the randomspawners themselves?
Here's an example of the DECORATE I'm using:
ACTOR BaronofhellReplacer replaces Baronofhell
{
states
{
Spawn:
POSS A 0
Goto Scripted
Scripted:
POSS A 0 A_JumpIf(CallACS("CH_BaronsReplacer") == 0, "Off") //Replacers Off
POSS A 0 A_JumpIf(CallACS("CH_BaronsReplacer") == 1, "On") //Default
POSS A 0 A_JumpIf(CallACS("CH_BaronsReplacer") == 2, "More") //Replacers more frequent
POSS A 0 A_JumpIf(CallACS("CH_BaronsReplacer") == 3, "ReplOnly") //Replacers Only
POSS A 0
Goto On
Off:
POSS A 0 A_SpawnitemEx("Baronofhell2",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_TRANSFERSPECIAL|SXF_TRANSFERAMBUSHFLAG)
stop
On:
POSS A 0 A_SpawnitemEx("BaronofhellDefault",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_TRANSFERSPECIAL|SXF_TRANSFERAMBUSHFLAG)
stop
More:
POSS A 0 A_SpawnitemEx("BaronofhellFrequent",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_TRANSFERSPECIAL|SXF_TRANSFERAMBUSHFLAG)
stop
ReplOnly:
POSS A 0 A_SpawnitemEx("BaronofhellReplacers",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_TRANSFERSPECIAL|SXF_TRANSFERAMBUSHFLAG)
stop
}
}
ACTOR BaronofhellReplacers : RandomSpawner
{
DropItem "Cybruiser" 255, 10
DropItem "LordOfHeresy" 255, 30
DropItem "HellstormArchon" 255, 10
DropItem "BelphegorClone" 255, 30
DropItem "Cyberbaron" 255, 10
DropItem "WarlordOfHell" 255, 20
DropItem "DeepOne" 255, 10
DropItem "ProfaneOne" 255, 20
DropItem "CyberWeaponsDude" 255, 1
}
ACTOR BaronofhellDefault: RandomSpawner
{
DropItem "Baronofhell2" 255, 4
DropItem "BaronofhellReplacers" 255, 3
}
ACTOR BaronofhellFrequent: RandomSpawner
{
DropItem "Baronofhell2" 255, 1
DropItem "BaronofhellReplacers" 255, 5
}
(not from the example pk3)
Re: Ambush Flag gone(A_SpawnitemEx+randomspawner)
Posted: Sun Jun 30, 2019 2:00 am
by _mental_
SXF_TRANSFERAMBUSHFLAG doesn't transfer spawn flag, only actor's one. Probably, it's a bug because initial ambush state is lost indeed.
This can be fixed by copying bAmbushhere, or by setting corresponding bit in SpawnFlagshere.
I need someone else opinion as I cannot decide which one is better.
Re: Ambush Flag gone(A_SpawnitemEx+randomspawner)
Posted: Sun Jun 30, 2019 2:40 am
by Plynthus
Thanks for the info _mental_!
Also I wanted to add that you can even spawn a RandomSpawner through another RandomSpawner, and even that works just fine.
But when you combine A_SpawnitemEx with RandomSpawner. That's when it breaks.
Re: Ambush Flag gone(A_SpawnitemEx+randomspawner)
Posted: Sun Jun 30, 2019 6:46 am
by Plynthus
And for my own mod I could define RandomSpawner2 using this code?
I'm very unfamiliar with zscript. I tried couple things, but couldn't get it to work.
Re: Ambush Flag gone(A_SpawnitemEx+randomspawner)
Posted: Sun Jun 30, 2019 6:55 am
by _mental_
Instead of incorporating some workarounds, I would wait for Graf's reply on this topic.
Re: Ambush Flag gone(A_SpawnitemEx+randomspawner)
Posted: Sun Jun 30, 2019 6:57 am
by Plynthus
Ok, thank you! I'm new here.
And I'm just really hoping to get the options settings to work in my mod.
Re: Ambush Flag gone(A_SpawnitemEx+randomspawner)
Posted: Wed Jul 03, 2019 1:05 pm
by Plynthus
(I added this to the original post)
Spoiler:
+BossDeath doesn't seem to transfer either. (using the same type of A_SpawnItemEx + RandomSpawner combination)
If I've understood correctly that is the one needed for things like E1M8. Kill the barons to trigger tag 666.
Or maybe the +BossDeath transfers fine. But GZDOOM doesn't count them as Barons anymore. Because "replaces Baronofhell" is not in the randomspawners themselves?
Here's an example of the DECORATE I'm using:
ACTOR BaronofhellReplacer replaces Baronofhell
{
states
{
Spawn:
POSS A 0
Goto Scripted
Scripted:
POSS A 0 A_JumpIf(CallACS("CH_BaronsReplacer") == 0, "Off") //Replacers Off
POSS A 0 A_JumpIf(CallACS("CH_BaronsReplacer") == 1, "On") //Default
POSS A 0 A_JumpIf(CallACS("CH_BaronsReplacer") == 2, "More") //Replacers more frequent
POSS A 0 A_JumpIf(CallACS("CH_BaronsReplacer") == 3, "ReplOnly") //Replacers Only
POSS A 0
Goto On
Off:
POSS A 0 A_SpawnitemEx("Baronofhell2",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_TRANSFERSPECIAL|SXF_TRANSFERAMBUSHFLAG)
stop
On:
POSS A 0 A_SpawnitemEx("BaronofhellDefault",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_TRANSFERSPECIAL|SXF_TRANSFERAMBUSHFLAG)
stop
More:
POSS A 0 A_SpawnitemEx("BaronofhellFrequent",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_TRANSFERSPECIAL|SXF_TRANSFERAMBUSHFLAG)
stop
ReplOnly:
POSS A 0 A_SpawnitemEx("BaronofhellReplacers",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_TRANSFERSPECIAL|SXF_TRANSFERAMBUSHFLAG)
stop
}
}
ACTOR BaronofhellReplacers : RandomSpawner
{
DropItem "Cybruiser" 255, 10
DropItem "LordOfHeresy" 255, 30
DropItem "HellstormArchon" 255, 10
DropItem "BelphegorClone" 255, 30
DropItem "Cyberbaron" 255, 10
DropItem "WarlordOfHell" 255, 20
DropItem "DeepOne" 255, 10
DropItem "ProfaneOne" 255, 20
DropItem "CyberWeaponsDude" 255, 1
}
ACTOR BaronofhellDefault: RandomSpawner
{
DropItem "Baronofhell2" 255, 4
DropItem "BaronofhellReplacers" 255, 3
}
ACTOR BaronofhellFrequent: RandomSpawner
{
DropItem "Baronofhell2" 255, 1
DropItem "BaronofhellReplacers" 255, 5
}
(not from the example pk3)
Re: Ambush Flag gone(A_SpawnitemEx+randomspawner)
Posted: Thu Jul 04, 2019 5:38 am
by drfrag
This looks like it could be an important bug. I wonder when it was introduced, in the last round of scriptifications?
Re: Ambush Flag gone(A_SpawnitemEx+randomspawner)
Posted: Thu Jul 04, 2019 5:56 am
by Graf Zahl
The problem here is very simple: The RandomSpawner was designed for replacing map placed items, it contains code to handle the flags from there. This will always overwrite those map-settable flags in the spawner actor itself, which is where the SXF_TRANSFERAMBUSHFLAG writes into. And since a runtime-spawned actor has no corresponding mapthing, these flags will not be set.
Re: Ambush Flag gone(A_SpawnitemEx+randomspawner)
Posted: Thu Jul 04, 2019 7:57 am
by Plynthus
Thanks for the answer!
So to make sure I understood correctly. It is like that on purpose and it's not a bug?
Re: Ambush Flag gone(A_SpawnitemEx+randomspawner)
Posted: Thu Jul 04, 2019 9:27 am
by Graf Zahl
It's not a bug but it still should be investigated if this can be worked around.
Re: Ambush Flag gone(A_SpawnitemEx+randomspawner)
Posted: Thu Jul 04, 2019 11:12 am
by Plynthus
Thanks, great to know!
Also the BossDeath thing might be even bigger.
I tried spawning the ACTOR directly using the SpawnItemEx, and not through a RandomSpawner as well. And their special actions("BaronSpecial", "CyberdemonSpecial" etc.) gets triggered as soon as you start the map.
And if I spawned RandomSpawner throgh SpawnItemEx. Those "specials" wouldn't trigger at all(shown in the second video).
I assume this isn't a bug either. Just thought I'd point it out, because I just noticed it.
Re: Ambush Flag gone(A_SpawnitemEx+randomspawner)
Posted: Sat Jul 06, 2019 2:16 am
by _mental_
Graf Zahl wrote:It's not a bug but it still should be investigated if this can be worked around.
For ambush flag I proposed two possible solutions here.
As for boss death thing, most likely all replacement monsters need to be made "boss".
Re: Ambush Flag gone(A_SpawnitemEx+randomspawner)
Posted: Sat Jul 06, 2019 3:17 am
by Plynthus
I have tried that for the boss death thing. With no success so far.
It happens even when you spawn the original monster(well, a copy of it at least) that way.
I made 2 example wads where the problem happens in different ways:
(there's only DECORATE lump in there so file size is very small)
ACTOR CyberReplacer : Randomspawner replaces Cyberdemon
{
Dropitem "CyberdemonReplacer"
}
ACTOR CyberdemonReplacer
{
states
{
Spawn:
TNT1 A 0
TNT1 A 0 A_SpawnitemEx("Cyberdemon2",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_TRANSFERSPECIAL|SXF_TRANSFERAMBUSHFLAG)
stop
}
}
ACTOR Cyberdemon2 : Cyberdemon {}
Example 2 https://www.mediafire.com/file/hcrxzz0v ... 8.wad/file
-If you go to E2M8 and kill the Cyberdemon, nothing happens. I lowered it's health down to 15 for test purpose.
-Maybe the randomspawner had nothing to do with this after all, because it happens even when doing it like this:
ACTOR CyberdemonReplacer replaces Cyberdemon
{
states
{
Spawn:
TNT1 A 0
TNT1 A 0 A_SpawnitemEx("Cyberdemon2",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_TRANSFERSPECIAL|SXF_TRANSFERAMBUSHFLAG)
stop
}
}
ACTOR Cyberdemon2 : Cyberdemon
{
Health 15
}
And for the ambush flag. I know your reply wasn't for me, but I thought I should mention this.
I can confirm that I got it working with the first way you proposed. I added
"newmobj.bAmbush = bAmbush;"
to the "// copy everything relevant" section starting from line 187.
Haven't noticed it causing any side effects or any other problems so far.