There are zombie Marines and zombie chaingunners (both are present in Brutal Doom 64); however, I haven't seen Revenants (beyond BD64's Tchernobog sprite-hack) or Arch-Viles unfortunately.JohnnyTheWolf wrote:Given how active and productive the Doom community has been for the last two decades, it is weird that nobody has made proper sprites for the missing Doom 64 monsters.
You would think it would have been a much more straightforward task than to create brand-new monsters, like Realm667 did.
Doom 64: Retribution
- Retraux Squid
- Posts: 230
- Joined: Sat Aug 13, 2016 8:41 pm
- Location: E1M1
Re: [v1.3] Doom 64: Retribution
Re: [v1.3] Doom 64: Retribution
I've tried to fix this but no luck yet. They also fail at infighting if their target is below a certain height, they just shoot the ground. There's not much I can do because the origin of the attack still needs to line up with the sprite's guns. Them shooting the floor is a side effect.Retraux Squid wrote:Just a note: the Arachnotron appears to be totally helpless if you stand beyond a certain range from it; its twin plasma shots will simply go straight past you on either side.
- TheBoltReaper
- Posts: 5
- Joined: Thu Jun 15, 2017 8:14 pm
Re: [v1.3] Doom 64: Retribution
I liked the game, it's just like the original
-
- Posts: 25
- Joined: Thu Jun 29, 2017 8:40 am
Re: [v1.3] Doom 64: Retribution
Hello! I noticed that the Pain Elemental is missing a feature - in Doom 64, the Pain Elemental's Lost Souls explode like rockets if they're too close to the player or a wall to spawn, discouraging players from getting in the Pain Elemental's face or being close to it when it pops. But this version of them acts like the vanilla Doom 2 Pain Elemental, so nothing happens in those situations.
I made a mod that adds this to the Doom 2 Pain Elemental, so I reworked it for the Doom 64 one. I've tested it in comparison to DOOM 64 EX extensively - I can't be sure if it's 1:1, but it looks pretty close to me. I don't know if it's the exact same damage as in Doom 64 either, but just the default barrel explosion damage seems about the same as Doom 64 EX (i.e. an 100 health no armor player dies instantly if hit by both Lost Soul explosions). Here's the Decorate code:
What this does is have the Pain Elemental fire two "Lost Soul"s as projectiles. If the "Lost Soul" hits anything (like a player) immediately upon spawning, it explodes like a barrel, but if it doesn't hit anything, it's instantly and seamlessly replaced with a real Lost Soul. The same thing happens to the Lost Souls that spawn when the PE dies, but these use a different actor so that they aren't charging when they spawn.
The only problems I've been able to see is that the Lost Soul explosion can launch the player (or their corpse) quite a bit. But that's a property of A_Explode, so I don't know what to do about it - you could use A_RadiusGive and Inventory items to simulate giving the damage to the player instead, but you'd lose the radius damage that way.
Anyway, feel free to use!
ETA: Made a bunch of changes to make it more accurate to the Doom 64 version.
I made a mod that adds this to the Doom 2 Pain Elemental, so I reworked it for the Doom 64 one. I've tested it in comparison to DOOM 64 EX extensively - I can't be sure if it's 1:1, but it looks pretty close to me. I don't know if it's the exact same damage as in Doom 64 either, but just the default barrel explosion damage seems about the same as Doom 64 EX (i.e. an 100 health no armor player dies instantly if hit by both Lost Soul explosions). Here's the Decorate code:
Code: Select all
ACTOR 64PainElemental : PainElemental REPLACES PainElemental
{
Radius 50
Height 90
DamageFactor "SoulBoom", 0
Mass 600 // DEFAULT IS 400
Obituary "$OB_SKULL"
States
{
Spawn:
PAIN AD 10 A_Look
Loop
See:
PAIN A 0 A_ScaleVelocity(0.50)
PAIN A 3 A_Chase
Loop
Missile:
PAIN BB 6 A_FaceTarget
PAIN C 6 BRIGHT A_FaceTarget
TNT1 A 0 A_DualPainAttack("LostSoulExplode")
Goto See
Pain:
PAIN D 6
PAIN D 6 A_Pain
Goto See
Pain.Vertigo:
PAIN D 0 ThrustThingZ(0, 55, 0, 0)
PAIN D 6
PAIN D 6 A_Pain
Goto See
Death:
PAIN E 8 BRIGHT
PAIN F 8 BRIGHT A_Scream
PAIN G 8 BRIGHT
PAIN H 8 BRIGHT A_SetTranslucent(0.90)
PAIN I 5 BRIGHT A_PainDie("LostSoulDeath")
PAIN J 5 BRIGHT A_SetTranslucent(0.75)
PAIN K 4 BRIGHT A_SetTranslucent(0.50)
PAIN L 4 BRIGHT
Stop
Raise:
PAIN LKJIHGFE 8
Goto See
Crush:
TNT1 A 0
TNT1 A 1
Stop
}
}
ACTOR 64LostSoul : LostSoul REPLACES LostSoul
{
Health 45
Radius 16
Height 56
RenderStyle SoulTrans
+MISSILEMORE
+MISSILEEVENMORE
+NOBLOOD
+NOBLOODDECALS
+NOTARGET
States
{
Spawn:
SKUL ABC 5 BRIGHT A_Look
Loop
See:
SKUL ABC 3 BRIGHT A_Chase
Loop
Missile:
SKUL D 10 BRIGHT A_FaceTarget
SKUL E 4 BRIGHT A_SkullAttack(30)
SKUL DE 4 BRIGHT A_ChangeFlag("NOTARGET", FALSE)
Goto Missile+2
Pain:
SKUL F 3 BRIGHT
SKUL F 3 BRIGHT A_Pain
Goto See
Pain.Vertigo:
SKUL F 0 BRIGHT ThrustThingZ(0, 55, 0, 0)
SKUL F 3 BRIGHT
SKUL F 3 BRIGHT A_Pain
Goto See
Death:
SKUL G 0 BRIGHT
SKUL G 6 BRIGHT
SKUL H 6 BRIGHT A_Scream
SKUL I 4 BRIGHT
SKUL J 3 BRIGHT A_NoBlocking
SKUL KLMNOP 3 BRIGHT A_FadeOut(0.20)
Stop
Crush:
TNT1 A 0
TNT1 A 1
Stop
}
}
Actor LostSoulExplode : 64LostSoul
{
states
{
Spawn:
SKUL D 5 BRIGHT
TNT1 A 0 A_SpawnItemEx("LostSoulCharge", 0, 0, 0, 0, 0, 3, 0, SXF_NOCHECKPOSITION)
stop
Death:
SKUL G 0 BRIGHT
SKUL G 6 BRIGHT
SKUL H 6 BRIGHT A_Scream
TNT1 A 0 A_Explode(128,128,XF_EXPLICITDAMAGETYPE,0,0,0,0,0,"SoulBoom")
SKUL I 4 BRIGHT
SKUL J 3 BRIGHT A_NoBlocking
SKUL KLMNOP 3 BRIGHT A_FadeOut(0.20)
Stop
}
}
Actor LostSoulDeath : 64LostSoul
{
states
{
Spawn:
TNT1 A 0
SKUL AB 5 BRIGHT
SKUL C 5 BRIGHT
stop
Pain:
SKUL F 3 BRIGHT
SKUL F 3 BRIGHT A_Pain
TNT1 A 0 A_SpawnItemEx("64LostSoul", 0, 0, 0, 0, 0, 0, 0, SXF_NOCHECKPOSITION)
stop
Death:
SKUL G 0 BRIGHT
SKUL G 6 BRIGHT
SKUL H 6 BRIGHT A_Scream
TNT1 A 0 A_Explode(128,128,XF_EXPLICITDAMAGETYPE,0,0,0,0,0,"SoulBoom")
SKUL I 4 BRIGHT
SKUL J 3 BRIGHT A_NoBlocking
SKUL KLMNOP 3 BRIGHT A_FadeOut(0.20)
Stop
}
}
Actor LostSoulCharge : 64LostSoul
{
states
{
Spawn:
SKUL D 5 BRIGHT A_FaceTarget
SKUL E 4 BRIGHT A_SkullAttack(30)
SKUL DE 4 BRIGHT A_ChangeFlag("NOTARGET", FALSE)
Goto Super::Missile+2
}
}
The only problems I've been able to see is that the Lost Soul explosion can launch the player (or their corpse) quite a bit. But that's a property of A_Explode, so I don't know what to do about it - you could use A_RadiusGive and Inventory items to simulate giving the damage to the player instead, but you'd lose the radius damage that way.
Anyway, feel free to use!
ETA: Made a bunch of changes to make it more accurate to the Doom 64 version.
- GripZ
- Posts: 45
- Joined: Sun May 28, 2017 7:21 pm
- Graphics Processor: Intel (Legacy GZDoom)
- Location: Southeast Asia
Re: [v1.3] Doom 64: Retribution
There's a bug (hopefully you see this)
Whenever i kill the imp with the ketchup patch mod the imp just freeze mid death animation.
Whenever i kill the imp with the ketchup patch mod the imp just freeze mid death animation.
Re: [v1.3] Doom 64: Retribution
That's not something I can fix on my end. The problem most likely is that the ketchup patch mod most likely redefines the Imp again using standard the Doom 2 animation set, which when used with Doom 64 graphics causes the animation to end a frame or two too soon.GripZ wrote:There's a bug (hopefully you see this)
Whenever i kill the imp with the ketchup patch mod the imp just freeze mid death animation.
- Kinsie
- Posts: 7399
- Joined: Fri Oct 22, 2004 9:22 am
- Graphics Processor: nVidia with Vulkan support
- Location: MAP33
- Contact:
Re: [v1.3] Doom 64: Retribution
Imitating the Doom 64 visual style would require a reasonably skilled 3D artist, and those are in pretty short supply in this community.JohnnyTheWolf wrote:Given how active and productive the Doom community has been for the last two decades, it is weird that nobody has made proper sprites for the missing Doom 64 monsters.
-
- Posts: 25
- Joined: Thu Jun 29, 2017 8:40 am
Re: [v1.3] Doom 64: Retribution
Hi again! I realized after more testing that my exploding Lost Soul code was really hacky, buggy, and inefficient so I went back and redid it. I realized I could do the same thing with the normal Lost Soul by using inventory items, like this:
Now, if the Lost Soul dies the instant it spawns (as it would if it can't spawn), it explodes and does damage, but if it successfully enters any other state, an inventory item is given to it that prevents the explosion from happening. So now it otherwise acts exactly like a real Lost Soul (because it is one)!
Code: Select all
ACTOR 64PainElemental : PainElemental REPLACES PainElemental
{
Radius 50
Height 90
DamageFactor "SoulBoom", 0
Mass 600 // DEFAULT IS 400
States
{
Spawn:
PAIN AD 10 A_Look
Loop
See:
PAIN A 0 A_ScaleVelocity(0.50)
PAIN A 3 A_Chase
Loop
Missile:
PAIN BB 6 A_FaceTarget
PAIN C 6 BRIGHT A_FaceTarget
TNT1 A 0 A_DualPainAttack
Goto See
Pain:
PAIN D 6
PAIN D 6 A_Pain
Goto See
Pain.Vertigo:
PAIN D 0 ThrustThingZ(0, 55, 0, 0)
PAIN D 6
PAIN D 6 A_Pain
Goto See
Death:
PAIN E 8 BRIGHT
PAIN F 8 BRIGHT A_Scream
PAIN G 8 BRIGHT
PAIN H 8 BRIGHT A_SetTranslucent(0.90)
PAIN I 5 BRIGHT A_PainDie
PAIN J 5 BRIGHT A_SetTranslucent(0.75)
PAIN K 4 BRIGHT A_SetTranslucent(0.50)
PAIN L 4 BRIGHT
Stop
Raise:
PAIN LKJIHGFE 8
Goto See
Crush:
TNT1 A 0
TNT1 A 1
Stop
}
}
ACTOR 64LostSoul : LostSoul REPLACES LostSoul
{
Health 45
Radius 16
Height 56
RenderStyle SoulTrans
DamageFactor "SoulBoom", 0
+MISSILEMORE
+MISSILEEVENMORE
+NOBLOOD
+NOBLOODDECALS
+NOTARGET
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_GiveInventory("SoulNoBoom", 1)
SKUL ABC 5 BRIGHT A_Look
Loop
See:
TNT1 A 0 A_GiveInventory("SoulNoBoom", 1)
SKUL ABC 3 BRIGHT A_Chase
Loop
Missile:
SKUL D 10 BRIGHT A_FaceTarget
SKUL E 4 BRIGHT A_SkullAttack(30)
SKUL DE 4 BRIGHT A_ChangeFlag("NOTARGET", FALSE)
Goto Missile+2
Pain:
TNT1 A 0 A_GiveInventory("SoulNoBoom", 1)
SKUL F 3 BRIGHT
SKUL F 3 BRIGHT A_Pain
Goto See
Pain.Vertigo:
TNT1 A 0 A_GiveInventory("SoulNoBoom", 1)
SKUL F 0 BRIGHT ThrustThingZ(0, 55, 0, 0)
SKUL F 3 BRIGHT
SKUL F 3 BRIGHT A_Pain
Goto See
Death:
SKUL G 0 BRIGHT
TNT1 A 0 A_JumpIfInventory("SoulNoBoom", 1, 1)
goto SoulBoom
SKUL G 6 BRIGHT
SKUL H 6 BRIGHT A_Scream
SKUL I 4 BRIGHT
SKUL J 3 BRIGHT A_NoBlocking
SKUL KLMNOP 3 BRIGHT A_FadeOut(0.20)
Stop
SoulBoom:
SKUL G 6 BRIGHT
SKUL H 6 BRIGHT A_Scream
TNT1 A 0 A_Explode(128,128,XF_EXPLICITDAMAGETYPE,0,0,0,0,0,"SoulBoom")
SKUL I 4 BRIGHT
SKUL J 3 BRIGHT A_NoBlocking
SKUL KLMNOP 3 BRIGHT A_FadeOut(0.20)
Stop
Crush:
TNT1 A 0
TNT1 A 1
Stop
}
}
ACTOR SoulNoBoom : Inventory
{
Inventory.MaxAmount 1
}
Re: [v1.3] Doom 64: Retribution
But what if one of the two Lost Souls spawned dies and the other does not? And what about multiple spawns? Because there's no TakeInventory happening so as soon as one successfully spawns you will always have 1 of the item and it will never get taken away, thus the normal Death will always run even if it should run SoulBoom. With multiple Pain Elementals around not to mention normal Lost Souls it will get chaotic.
Why not instead do a JumpIfCloser on the Lost Soul death state if the target (which will be the player the majority of the time) is within a very short distance?
Why not instead do a JumpIfCloser on the Lost Soul death state if the target (which will be the player the majority of the time) is within a very short distance?
-
- Posts: 25
- Joined: Thu Jun 29, 2017 8:40 am
Re: [v1.3] Doom 64: Retribution
I'm sorry, I don't understand. The Lost Souls do the A_GiveInventory check individually on themselves, so if one spawns and the other doesn't, that shouldn't be a problem - the one that spawns successfully will get the "SoulNoBoom" inventory item, so it won't explode, while the one that doesn't spawn never gets a chance to receive the item (because it instantly enters the Death state), so it will explode. There's no need for a TakeInventory to happen either because if the Lost Soul has spawned successfully (i.e. entered any other state), then it shouldn't ever have a need to explode - the only purpose of the SoulNoBoom item is to prevent it from exploding.
If you did a JumpIfCloser on the target, that would cause all Lost Souls to explode if the player is next to them. So if you were in a tight space or were attacking a Lost Soul in a corner, you'd damage yourself when you killed them, even if the Lost Soul spawned thirty seconds ago.
ETA: OK, I did some more testing. If a Pain Elemental summons one Lost Soul but the other fails to spawn, only the one that failed to spawn will explode. The other one doesn't when it's killed (and using TargetInv shows it has the SoulNoBoom item).
If you did a JumpIfCloser on the target, that would cause all Lost Souls to explode if the player is next to them. So if you were in a tight space or were attacking a Lost Soul in a corner, you'd damage yourself when you killed them, even if the Lost Soul spawned thirty seconds ago.
ETA: OK, I did some more testing. If a Pain Elemental summons one Lost Soul but the other fails to spawn, only the one that failed to spawn will explode. The other one doesn't when it's killed (and using TargetInv shows it has the SoulNoBoom item).
Re: [v1.3] Doom 64: Retribution
Oh wow I had no idea things other than the player could have inventories. Does that mean you can give a lamp items?
-
- Posts: 25
- Joined: Thu Jun 29, 2017 8:40 am
Re: [v1.3] Doom 64: Retribution
Yep! In fact, I've done exactly that before - it has its uses!
Re: [v1.3] Doom 64: Retribution
How do you tell A_Explode to ignore using a puff? I'm getting a warning now that there is an unknown class name 0.
EDIT: I just inherited from BulletPuff and made an invisible one that dies immediately, warning is gone.
EDIT: I just inherited from BulletPuff and made an invisible one that dies immediately, warning is gone.
-
- Posts: 25
- Joined: Thu Jun 29, 2017 8:40 am
Re: [v1.3] Doom 64: Retribution
Whoops. I'm not sure if it's possible to get it to not spawn a puff, but if you replace that line with this, that error should go away:
Testing it, I don't see the puff at all (it seems to be covered up by the LS sprites), so this should be fine. If you want to be extra sure though, you could make an actor that inherits from bulletpuff but has no sprites, like this:
Then just replace "BulletPuff" with "FakeBulletPuff" in the above line.
Code: Select all
TNT1 A 0 A_Explode(128,128,XF_EXPLICITDAMAGETYPE,0,0,0,0,"BulletPuff","SoulBoom")
Code: Select all
actor fakebulletpuff : bulletpuff
{
States
{
Spawn:
TNT1 A 1
// Intentional fall-through
Melee:
TNT1 A 1
Stop
}
}
Re: [v1.3] Doom 64: Retribution
Now for some reason I can't get A_Explode to do any damage to me even if I apply it to the normal Death state... wtf. I can't tell if it's working because of the clusterf**k that happens when a Pain Elemental is spawned. I cant distinguish the damage from Lost Souls hitting me or if they are exploding. Is there some easy way to test this because if I summon a Lost Soul to test damage and radius I don't seem to be getting hurt at all when it explodes.
EDIT: Some testing... the state is happening and A_Explode is happening because I gave it an absurd damage and radius and it sends stuff flying and blows up barrels across the map but it's not hurting me! However, if a Lost Soul fails to spawn it does indeed hurt me. I see a huge red flash when it happens, but any Lout Souls I personally send to the Death state by killing them seems to not hurt me whatsoever. Only if they spawn into it apparently do I take damage... is it because the player is instigating the state and not the world?
EDIT 2: I needed to add the XF_NOTMISSILE flag apparently... it seems somehow because the player kills it, we send it to the death state and the game somehow thinks it's a player made missile or something weird like that. Now I can test the radius and damage without needing to mess with Elementals.
EDIT: Some testing... the state is happening and A_Explode is happening because I gave it an absurd damage and radius and it sends stuff flying and blows up barrels across the map but it's not hurting me! However, if a Lost Soul fails to spawn it does indeed hurt me. I see a huge red flash when it happens, but any Lout Souls I personally send to the Death state by killing them seems to not hurt me whatsoever. Only if they spawn into it apparently do I take damage... is it because the player is instigating the state and not the world?
EDIT 2: I needed to add the XF_NOTMISSILE flag apparently... it seems somehow because the player kills it, we send it to the death state and the game somehow thinks it's a player made missile or something weird like that. Now I can test the radius and damage without needing to mess with Elementals.