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

[Zdoom] Xdeath state problem (decorate) [Resolved]

Recommended Posts

Hello,

So, I made this monster and for some reason, even though I defined an xdeath state, it just doesn't want to move to that state, no matter what way I kill him.

I may be doing something wrong though and well, that would be very plausible since I'm still a noob at decorate but, I hope to eventually get it to work.

Here is the code sequence that does not work:

XDeath:
    VILN Q 7
	VILX R 7 A_Playsound("Supervile/xdeath")
	VILX S 7 A_NoBlocking
	VILX TUVWXY 7
	VILX Z -1
	stop

For reference, here is the entire decorate code and a link to the monster in question:
Actor SuperArchvile: Archvile 20452
{
 //$Category Monsters
Health 1400
Painchance 5
radius 30
height 66
mass 500
speed 10
SeeSound "supervile/sight" 
PainSound "supervile/pain"
DeathSound "supervile/death"
ActiveSound "supervile/active"
+BOSS
+DONTHURTSPECIES
+MISSILEMORE
States
  {
  Spawn:
    VILN AB 10 A_Look
    Loop
  See:
    VILN AABBCCDDEEFF 2 A_VileChase
    Loop
  Missile:
    VILN G 0 Bright A_VileStart
    VILN G 10 Bright A_FaceTarget
    VILN H 8 Bright A_Viletarget("Superarchvilefire")
    VILN IJKLMN 8 Bright A_FaceTarget
    VILN O 8 Bright A_VileAttack("Vile/stop",25,random(75,90))
    VILN P 20 Bright A_jump(128,"Missile2")
	Goto See
  Missile2:
	VILN N 10 Bright A_Facetarget
	VILN O random(5,8) Bright A_Custommissile("SuperVileFB",48,0,0,0)
	VILN P 10 Bright A_Facetarget
	VILN N random(5,8) Bright A_Custommissile("SuperVileFB",48,0,0,0)
	VILN O 10 Bright A_Facetarget 
	VILN P random(5,8) Bright A_Custommissile("SuperVileFB",48,0,0,0)
	VILN N 10 Bright A_Facetarget 
	VILN O random(5,8) Bright A_Custommissile("SuperVileFB",48,0,0,0)
	VILN P 10 Bright A_Facetarget 
	VILN N random(5,8) Bright A_Custommissile("SuperVileFB",48,0,0,0)
	VILN O 10 Bright A_Facetarget
	VILN P random(5,8) Bright A_Custommissile("SuperVileFB",48,0,0,0)
	VILN N 10 Bright A_Facetarget
	VILN O random(5,8) Bright A_Custommissile("SuperVileFB",48,0,0,0)
	VILN P 10 Bright A_Facetarget
	Goto See
  Heal:
    VILN "[\]" 10 Bright
    Goto See
  Pain:
    VILN Q 5   
    VILN Q 5 A_Pain
    Goto See
  Death:
    VILN Q 7
    VILN R 7 A_Scream
    VILN S 7 A_NoBlocking
    VILN TUVWXY 7
    VILN Z -1
    Stop
  XDeath:
    VILN Q 7
	VILX R 7 A_Playsound("Supervile/xdeath")
	VILX S 7 A_NoBlocking
	VILX TUVWXY 7
	VILX Z -1
	stop
 }
}

ACTOR SuperArchvileFire: ArchvileFire
{
 DamageType fire
 states
 {
  Spawn:
    FIRN A 2 Bright A_StartFire
    FIRN BAB 2 Bright A_Fire
    FIRN C 2 Bright A_FireCrackle
    FIRN BCBCDCDCDEDED 2 Bright A_Fire
    FIRN E 2 Bright A_FireCrackle
    FIRN FEFEFGHGHGH 2 Bright A_Fire
    Stop
  }
}

ACTOR SuperVileFB: Fatshot
{
 Speed 30
 Damage 16
 States
	{
	Spawn:
		VILF AB 4 BRIGHT
		Loop
	Death:
		MISL B 8 BRIGHT
		MISL C 6 BRIGHT
		MISL D 4 BRIGHT
		Stop
	}
}

Link:

http://www.mediafire.com/download/pox7a3wa1jwdoxv/BlackArchvile.wad

There, thank you in advance :)

Share this post


Link to post

Monster gets gibbed only if the very last hit in which you kill him drains his health below the negative value of his GibHealth. In Doom, GibHealth is by default set equal to the monster's initial Health value. So, you'd have to damage him pretty extremely to overcome the -1400 HP threshold. You can define his GibHealth explicitly, though.

Share this post


Link to post

I get the XDeath when I kill it with the MDK console command, or with a telefrag or other things that inflict massive amounts of damage.

By default, in Doom, XDeath only happens if the monster is inflicted so much damage that it is reduced to the negative of its starting health. So since your super vile has 1400 hit points, it needs to be reduced to -1400 hit points or less, which needs that you need to kill it with an attack that deals at least 1401 damage in only one go. And of course 1401 damage will only cause the XDeath if the super vile had first been reduced to only 1 health, so you'll need a first attack that deals precisely 1399 damage (any more and the vile dies "normally") and a second attack that deals 1401 or more damage (any less and the vile dies normally as well).

(Something that deals a lot of damage, but spread across several different attacks, like a super shotgun with its 20 pellets, or a BFG with its ball and 40 traces, will not count. You need to have all 1401+ damage happen with a single projectile or trace.)

Alternatively, you can do the following things:
1. Set a specific GibHealth value much lower than 1400, so there is a greater chance of reaching it.
2. Have some attack vectors (projectiles or puffs, not weapons) have the EXTREMEDEATH flag, so that they will force the XDeath even if GibHealth isn't reached.

Share this post


Link to post
scifista42 said:

Monster gets gibbed only if the very last hit in which you kill him drains his health below the negative value of his GibHealth. In Doom, GibHealth is by default set equal to the monster's initial Health value. So, you'd have to damage him pretty extremely to overcome the -1400 HP threshold. You can define his GibHealth explicitly, though. Set it as a positive number in your DECORATE, the engine will then make the monster gib if his health goes below the negative value of this number.


Ah, I didn't know that, thank you :)

Share this post


Link to post

By the way, I have edited my post because reading the wiki description got me confused at last moment: Is the GibHealth property supposed to be written as a positive or as a negative number when being set explicitly? The wiki description somehow gives me both implications.

Share this post


Link to post

Thank you guys for the answers. I, however went for just an alternative death that has a 50% chance of happening (it works well too so heh).

Again though, thank you for taking the time to answer my questions. I will keep the xdeath thing in mind for later ^^

For now, I just went with a "death2" state and it will do the trick.

Share this post


Link to post
scifista42 said:

By the way, I have edited my post because reading the wiki description got me confused at last moment: Is the GibHealth property supposed to be written as a positive or as a negative number when being set explicitly? The wiki description somehow gives me both implications.

well it doesn't actually matter.

int AActor::GibHealth()
{
	return -abs(GetClass()->Meta.GetMetaInt (AMETA_GibHealth, FixedMul(SpawnHealth(), gameinfo.gibfactor)));
}
Meta.GetMetaInt() will return the gibhealth if it's defined, or the product of spawnhealth times gibfactor otherwise.

Regardless, we make the returned value absolute (so it'll be positive) and negate it (so it'll be negative). Doesn't matter if it started as a positive or a negative value. Write what you prefer.

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  
×