The Wiki is indeed a little unclear on this, but what you're describing is consistent with the instructions given there.
Your problem is twofold. Firstly, the NewBulletPuff actor will always play the SeeSound when it hits an actor, wether it's a bleeding actor or not. Therefore you're unable to stop the 'splat/thump' sound from being played if you define it as the puff's SeeSound.
However, your very first post makes the solution to this problem obvious: define the 'splat/thump' sound as a property of the blood splat actor, not the NewBulletPuff. In this case, setting the Blood actor's PainSound to 'splat/thump' should work (but I haven't tested that). Leave the SeeSound property of the NewBulletPuff blank. The only downside to this is that you'll be stuck with one 'splat' sound for all enemies and weapons (unless you start messing around with custom damagetypes and pain states).
That then leaves us with the problem of not having an impact sound for hitting an actor, bleeding or not. You've compounded the problem by not defining a Crash state for NewBulletPuff, which the Wiki clearly states is the prioritized state for hitting a wall. Having the Crash state take care of wall impacts (using a call to A_PlaySound to play the relevant ricochet sounds) frees up the Spawn state for the only other instance that requires it: hitting a non-bleeding actor!
We'll get rid of the Melee state in NewBulletPuff; you should define custom puffs for your melee attacks separately.
Here's the modified code:
Code: Select all
actor NewBulletPuff : BulletPuff replaces BulletPuff
{
spawnid 131
renderstyle Translucent
alpha 0.5
// no sound properties defined here
+NOBLOCKMAP
+NOGRAVITY
+ALLOWPARTICLES
states
{
Spawn: // hits a non-bleeding actor
TNT1 A 0 // function calls in the first frame of the state are never executed
TNT1 A 0 A_PlaySound("puff/clang") // plays the 'clang' sound
PUFF A 4 bright
PUFF B 4
Goto Melee+2 // emulates fall-through of original BulletPuff actor without playing the melee sound separately
Melee: // melee attack a non-bleeding actor
TNT1 A 0
TNT1 A 0 A_PlaySound(// insert generic melee attack sound here)
PUFF CD 4
Stop
Crash: // hits a wall
TNT1 A 0
TNT1 A 0 A_PlaySound("puff/ric") // plays the ricochet sound
PUFF A 4 bright
PUFF B 4
Goto Melee+2
}
}
actor NewBlood : Blood replaces Blood {
painsound "splat/thump" // played upon spawning (i.e. attack hits a bleeding actor)
}
Give that a try and see what works for you.
EDIT: put the Melee state back in, just in case you don't want to define custom puffs for melee attacks.