Doom 64: Retribution

Projects that have specifically been abandoned or considered "dead" get moved here, so people will quit bumping them. If your project has wound up here and it should not be, contact a moderator to have it moved back to the land of the living.
Locked
User avatar
Retraux Squid
Posts: 230
Joined: Sat Aug 13, 2016 8:41 pm
Location: E1M1

Re: [v1.3] Doom 64: Retribution

Post by Retraux Squid »

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.
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.
Nevander
Posts: 2254
Joined: Mon Jan 06, 2014 11:32 pm

Re: [v1.3] Doom 64: Retribution

Post by Nevander »

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.
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.
User avatar
TheBoltReaper
Posts: 5
Joined: Thu Jun 15, 2017 8:14 pm

Re: [v1.3] Doom 64: Retribution

Post by TheBoltReaper »

I liked the game, it's just like the original 8-)
snackerfork
Posts: 25
Joined: Thu Jun 29, 2017 8:40 am

Re: [v1.3] Doom 64: Retribution

Post by snackerfork »

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:

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
	}
}
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.
User avatar
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

Post by GripZ »

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.
Nevander
Posts: 2254
Joined: Mon Jan 06, 2014 11:32 pm

Re: [v1.3] Doom 64: Retribution

Post by Nevander »

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.
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.
User avatar
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

Post by Kinsie »

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.
Imitating the Doom 64 visual style would require a reasonably skilled 3D artist, and those are in pretty short supply in this community.
snackerfork
Posts: 25
Joined: Thu Jun 29, 2017 8:40 am

Re: [v1.3] Doom 64: Retribution

Post by snackerfork »

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:

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
}
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)!
Nevander
Posts: 2254
Joined: Mon Jan 06, 2014 11:32 pm

Re: [v1.3] Doom 64: Retribution

Post by Nevander »

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?
snackerfork
Posts: 25
Joined: Thu Jun 29, 2017 8:40 am

Re: [v1.3] Doom 64: Retribution

Post by snackerfork »

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).
Nevander
Posts: 2254
Joined: Mon Jan 06, 2014 11:32 pm

Re: [v1.3] Doom 64: Retribution

Post by Nevander »

Oh wow I had no idea things other than the player could have inventories. Does that mean you can give a lamp items? :lol:
snackerfork
Posts: 25
Joined: Thu Jun 29, 2017 8:40 am

Re: [v1.3] Doom 64: Retribution

Post by snackerfork »

Yep! In fact, I've done exactly that before - it has its uses! :)
Nevander
Posts: 2254
Joined: Mon Jan 06, 2014 11:32 pm

Re: [v1.3] Doom 64: Retribution

Post by Nevander »

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.
snackerfork
Posts: 25
Joined: Thu Jun 29, 2017 8:40 am

Re: [v1.3] Doom 64: Retribution

Post by snackerfork »

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:

Code: Select all

TNT1 A 0 A_Explode(128,128,XF_EXPLICITDAMAGETYPE,0,0,0,0,"BulletPuff","SoulBoom")
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:

Code: Select all

 actor fakebulletpuff : bulletpuff
{
States
  {
  Spawn:
    TNT1 A 1
    // Intentional fall-through
  Melee:
    TNT1 A 1
    Stop
  }
}
Then just replace "BulletPuff" with "FakeBulletPuff" in the above line.
Nevander
Posts: 2254
Joined: Mon Jan 06, 2014 11:32 pm

Re: [v1.3] Doom 64: Retribution

Post by Nevander »

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.
Locked

Return to “Abandoned/Dead Projects”