Yugiboy85 Posted January 27, 2016 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 :) 0 Share this post Link to post
scifista42 Posted January 27, 2016 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. 0 Share this post Link to post
Gez Posted January 27, 2016 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. 0 Share this post Link to post
Yugiboy85 Posted January 27, 2016 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 :) 0 Share this post Link to post
scifista42 Posted January 27, 2016 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. 0 Share this post Link to post
Yugiboy85 Posted January 27, 2016 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. 0 Share this post Link to post
Gez Posted January 27, 2016 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. 0 Share this post Link to post
scifista42 Posted January 27, 2016 Nice, thanks. Perhaps the wiki article would be more clear about it anyway. 0 Share this post Link to post