Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Du Mhan Yhu

Monster Question.

Recommended Posts

Is it possible to make monster corpses disappear?

I have a 4 (separate) 91x91 squares with 4 (separate) Revenants. When they die 4 Arch-Viles take there spots via teleport destination. Now I'm asking if the bodies of the Revenants can be made disappear so the Arch-Viles don't Raise them and they get get crammed in these squares?

Is this possible?

Share this post


Link to post

Super simple patch that will work in all ports (afaik):

Patch File for DeHackEd v3.0
Doom version = 21
Patch format = 6

Thing 6 (Revenant)
Respawn frame = 0
Makes the revenant simply not resurrectable. No need to remove the corpse, but note that this will affect all revenants. If you need to know how to distribute or implement the patch into your wad, just ask.

Share this post


Link to post
EarthQuake said:

need to know how to distribute or implement the patch into your wad, just ask.


(ZDoom Doom in Hexen Formay) btw.

Sure, I'd like to know. But, theres absolutely no way I can script it to just those 4 Revs? You know just have those 4 specific corpses disappear like seen in some places in Doom 64?

Share this post


Link to post

If this is for ZDoom, you're better off with ACS. Assign those revenants a unique TID and then use Thing_Remove(TID) in a script to remove the corpses prior to unleashing the archviles.

Script 1 (void)
{
  Thing_Remove(7777); // Remove revenants with a TID of 7777.

  // Spawn archviles at mapspots with TID of 8888.
  Thing_SpawnFacing(8888, T_ARCHVILE, FALSE, 0);
}
Call this script when you want to replace the revenants (dead or otherwise) with the archviles.

Share this post


Link to post

EDIT: I figured it out, it works perfect. Thanks again EarthQuake.

Is there a way to make them show up, maybe 3 seconds after the Revenant corpses disappear?

______________________________________________________________________
#include "zcommon.acs"

Script 1 (void)
{
Thing_Remove(7777); // Remove revenants with a TID of 7777.

// Spawn archviles at mapspots with TID of 8888.
Thing_SpawnFacing(8888, 111, FAlSE, 8888);
}

Script 2 (void)
{
Thing_Remove(7778); // Remove revenants with a TID of 7778.

// Spawn archviles at mapspots with TID of 8887.
Thing_SpawnFacing(8887, 111, FAlSE, 8888);
}

Script 3 (void)
{
Thing_Remove(7779); // Remove revenants with a TID of 7779.

// Spawn archviles at mapspots with TID of 8886.
Thing_SpawnFacing(8886, 111, FAlSE, 8888);
}

Script 4 (void)
{
Thing_Remove(7776); // Remove revenants with a TID of 7776.

// Spawn archviles at mapspots with TID of 8885.
Thing_SpawnFacing(8885, 111, FAlSE, 8888);
}

Share this post


Link to post

See here. Put the delay function between the line that removes the corpses and the line that spawns the arch-viles. Delay(35*3); (or delay(105);, if you hate multiplication) is equivalent to 3 seconds.

Though, depending on how you have the script triggers set up, it would probably be better to do it all through a single script, rather than through four near-identical ones.

Share this post


Link to post
Mithran Denizen said:

See here. Put the delay function between the line that removes the corpses and the line that spawns the arch-viles. Delay(35*3); (or delay(105);, if you hate multiplication) is equivalent to 3 seconds.

Though, depending on how you have the script triggers set up, it would probably be better to do it all through a single script, rather than through four near-identical ones.


Im still really getting used to this scripting deal. You should have seen my reaction when I got the first one to work lol.

So.. To put it all in one would confuse the hell out of me. But it can still work out the same it I put the Delay(35*3) between the line that removes the corpses and the line that spawns the arch-viles?


The only reason I have them separate like they are.. It's because the first time I got it, I tagged all of them with it. Once one Rev got killed the Archs would all show up at the same time and telefrag the other Revs. So I split them to separate scripts so they could be killed one at a time.

Share this post


Link to post

Well, it kind of sounds like you wanted all four arch-viles to spawn in after all four revenants have been dead for 3 seconds. If that's the case, then this simple bit of code can do it like that:

#include "zcommon.acs"

int deadRevs = 0;  // Set up a counter for dead revenants.

Script 1 (void)
{
  deadRevs++;  //Add +1 to the counter each time the script runs.
  
  if(deadRevs >= 4) //Only do the following block if the fourth has died.
  {
    Delay(35*3); // Wait three seconds.
    Thing_Remove(7777); // Remove revenants with TID 7777.

    // Spawn archviles at mapspots with TID of 8888.
    Thing_SpawnFacing(8888, T_VILE, FALSE, 0);
  }
}


For that to work, you just need to set all four revenants' TIDs to 7777, and their Thing actions to 80 (ACS Execute) with a "1" as the Script Number parameter. They'll activate the script each time they die, and after four have died, it'll replace them all with arch-viles.

Also, if some of the revenants are revived before the arch-viles are spawned in (as might happen in Nightmare mode), they'll probably lose their TIDs upon death, and fail to disappear when they normally would. People who play in NM or with -respawn are inevitably going to have weird issues like that once in a while, though, so it might not even be worth the effort of changing.

But if I'm misinterpreting what you said, and what you've already got works the way you want it to, then good for you. :)

Share this post


Link to post
Mithran Denizen said:

Well, it kind of sounds like you wanted all four arch-viles to spawn in after all four revenants have been dead for 3 seconds. If that's the case, then this simple bit of code can do it like that:

#include "zcommon.acs"

int deadRevs = 0;  // Set up a counter for dead revenants.

Script 1 (void)
{
  deadRevs++;  //Add +1 to the counter each time the script runs.
  
  if(deadRevs >= 4) //Only do the following block if the fourth has died.
  {
    Delay(35*3); // Wait three seconds.
    Thing_Remove(7777); // Remove revenants with TID 7777.

    // Spawn archviles at mapspots with TID of 8888.
    Thing_SpawnFacing(8888, T_VILE, FALSE, 0);
  }
}


For that to work, you just need to set all four revenants' TIDs to 7777, and their Thing actions to 80 (ACS Execute) with a "1" as the Script Number parameter. They'll activate the script each time they die, and after four have died, it'll replace them all with arch-viles.

Also, if some of the revenants are revived before the arch-viles are spawned in (as might happen in Nightmare mode), they'll probably lose their TIDs upon death, and fail to disappear when they normally would. People who play in NM or with -respawn are inevitably going to have weird issues like that once in a while, though, so it might not even be worth the effort of changing.

But if I'm misinterpreting what you said, and what you've already got works the way you want it to, then good for you. :)



I kinda like it better your way. Something to make the player have to break for more cover after 3 seconds of thinking hes safe. Awesome. Thanks, Mithran Denizen.

Share this post


Link to post
tempun said:

What if several revs die in the same tic? Will the script still work?


I think the script would only execute once. That's what ACS_ExecuteAlways covers. Such as it's name suggests, it always executes.

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  
×