Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
Inhuman Strain

After SUPER shotgun, why go back (some do)?

Recommended Posts

[WH]-Wilou84 said:
Not saying that kind of gameplay is fun, but it does exist anyway.

If done right, it's awesome fun.

Share this post


Link to post

I think the SSG is more efficient for the new monsters introduced in Doom II, which for the most part have higher HP than those in Doom I. Even in Doom II I still use the single shotgun on small enemies or hordes of small enemies, just because the tight horizontal spread works against groups of imps or zombies even at a distance whereas the pellets from the SSG will tend to go over the monsters or hit the floor before getting to them. On the other hand, the single shotgun is annoyingly slow in killing most larger enemies, and I use the SSG on medium-sized hordes of piggies as well as small numbers of cacodemons, hell knights, and especially arch-viles for the increased chance of interrupting their attack sequence.

Share this post


Link to post
xepop said:

Ammo wasting argument is such a bullshit too.


You've never played any Jodwin maps, have you? In those, ammo is at a premium but with respect to the SSG's waste, this is usually masked by the fact that the SSG is treated as a "premium" weapon, only to be given to the player after he's passed through some hardships with the simple SG.

Share this post


Link to post

Okay I have never played these "micromanagement" wads. I hope they aren´t so common :P

Share this post


Link to post
xepop said:

I hate SG, it´s so damn useless. It really pisses me off when in a hurry chaingunner blocks you and you have to basically roll a dice. With SSG it´s just booom and chainie is all over the place. Ammo wasting argument is such a bullshit too. There´s rarely a situation you encounter single low-tier monsters and if you do, changing to a SG is almost meaningless ammowise. Okay, if there´s single pistolguy in long range of course SG over SSG but what if there´s many? Why not get closer and blast them to bits with one SSG shot?


If you're good you can kill a chaingunner with one SG blast.

Share this post


Link to post

If you're good you can kill a chaingunner with one SG blast.

Lol wtf? Are you joking with me?

Share this post


Link to post
Krispavera said:

If you're good you can kill a chaingunner with one SG blast.


More if you're lucky:

Shots needed to kill 	 Mean 	 St.dev	Min 	Max
Wolfenstein SS 	          1.01 	 0.09 	1 	2
Imp 	                  1.06   0.24 	1 	2
Heavy weapon dude 	  1.32 	 0.47 	1 	2
Lost soul 	          1.98 	 0.12 	1 	2
Commander Keen 	          1.98   0.12 	1 	2 
TBQH, I've never witnessed one-shell Lost Soul kills, neither in vanilla nor in source ports. One-shell imp kills are very common, but sometimes they just don't happen, especially vs isolated imps. One-shot kills vs chaingunners are frequent but less so than imps, probably because there are less chances to blast a CG guy in the face than an imp. The high St. dev values in those cases reflect this fact.

Share this post


Link to post

I must just be a really lucky guy then, but I still don't consider an SSG shot wasted on one.

Share this post


Link to post
Krispavera said:

I must just be a really lucky guy then, but I still don't consider an SSG shot wasted on one.


Well, on a Lost Soul it surely isn't, as it's going to take 2 anyway. Also on pinkies and spectres, the SSG is a guaranteed 1-shot kill up close, while the normal SG is a bit marginal (ok, 10 avg damage per pellet, 140 HP and 14 pellets in 2 shells..better make than 20!)

On an imp it's def overkill if it's a lone imp (with 20 pellets you can take up to 3 imps down), vs a CG dude it's a bit of a gamble, because an imp that won't die in 1 shot will maybe retaliate once or twice, a CG dude could riddle your ass pretty badly. Better give him that extra shell then, and with him to anyone else behind him too. This is moreso true if there are any other monsters behind him: if you take a failed SG shot, you'll catch lead AND you will give time to the other baddies to charge up their attacks and complement the lead-bukkake you just took. Better give them all you've got right away ;-)

Share this post


Link to post
Krispavera said:

If you're good you can kill a chaingunner with one SG blast.

Watch xepop's speed demos on Hell Revealed II, he knows what he's talking about :)

But yeah the Shotgun can't always kill a Chaingunner in one shot, even at point blank. It's pretty frustrating in demos, basically the run is screwed if the random number generator decides to play with your nerves.
Happened a lot for the first chainie in this crappy run of mine.

Share this post


Link to post

Yeah, and like I said before, when I get the SSG I hardly ever touch the SG again. But I've always generally gotten lucky with the SG and chaingunners, and if it doesn't kill them, it at least leaves a window of opportunity to strafe behind a wall.

Share this post


Link to post
Maes said:

One-shot kills vs chaingunners are frequent but less so than imps, probably because there are less chances to blast a CG guy in the face than an imp.


I know in the original Doom code, the random number generator was just a list of pregenerated numbers.
see: http://doom.wikia.com/wiki/Random
So, this somewhat small list would limit the possible damage range.

Share this post


Link to post
Maes said:

TBQH, I've never witnessed one-shell Lost Soul kills, neither in vanilla nor in source ports. One-shell imp kills are very common, but sometimes they just don't happen, especially vs isolated imps. One-shot kills vs chaingunners are frequent but less so than imps, probably because there are less chances to blast a CG guy in the face than an imp. The high St. dev values in those cases reflect this fact.



it pisses me off when i switch to sg to kill single imps, and then, guess what? the bugger takes 2 shells to die. might have shot him with ssg as well for a guaranteed kill (at short range). i use to saw or punch those survivors, rather out of spite :p

otherwise, sg is obviously better at longer range, while close up you get more damage out of the same number of shells using the ssg.

Share this post


Link to post
Maes said:

TBQH, I've never witnessed one-shell Lost Soul kills

Perhaps because it's hard to make all the shells hit that little bugger in the first place. :P

Maes said:

One-shot kills vs chaingunners are frequent but less so than imps, probably because there are less chances to blast a CG guy in the face than an imp.

I thought those values assumed that all of the pellets connected. Otherwise, there would definitely be a max of 3 for people with bad aim. I'd say 1-shot kills are probably less frequent due to the fact that chaingunners have 10 more health. :P

Maes said:

vs a CG dude it's a bit of a gamble

What about groups of them? When you're surrounded by them, the regular shotgun keeps them stunned better, IMO. o_o

Share this post


Link to post

Yeah, I can recall a bundle of times where I got burned with the SSG against a group of chaingunners because only 2 of the go down, and the third starts unloading on me during the slow reload rate (Assuming there's no cover). Supposing I don't have anything other than the SG/SSG in those situations, I normally just keep the SG out.

Also, there are some monsters you can't get close to (SEE: Snipers) that the SSG is essentially pointless against. Thanks to the abundance of shells these days, I normally just use the shotgun against them too.

I feel like both sides of this discussion are going in circles :/

Share this post


Link to post
Spleen said:

Perhaps because it's hard to make all the shells hit that little bugger in the first place. :P


That, per-se, is not so hard, and a Lost Soul is actually a larger target than an imp or a former human. However, if you take apart Doom's RNG and damage calculations (I had done so, in an older thread), you will see that there are only 7 values in the whole RNG table that can yield maximum damage multiplier, and that those values are not spaced in such a way that can cause them to be used as such in a shotgun blast.

To sum up, shooting the SG "consumes" 21 consecutive values from the RNG table. Take the modulo of 3 of P_Random and see where the "2"s are. That's right, only 7 of them in the whole table and too far apart.

It would take 7 max damage pellets, aka 7x15= 105 HP to kill a lost soul in one blast, and that can't happen. Not even 6x15 + 1x10 can happen, due to the value distributions.

Therefore a max damage SG blast is just technically impossible in vanilla doom, unless you use a manipulated RNG (some TASers did so).

One of the reasons the SSG is so much more destructive than the SG is that shooting it actually uses more than 200 consecutive values, and picking the "right" ones is much more probable.



Source ports are another matter altogether. And yeah, Doom's "random" behavior is somewhat of an esoteric matter ;-)

Share this post


Link to post

Maes said:
It would take 7 max damage pellets, aka 7x15= 105 HP to kill a lost soul in one blast, and that can't happen. Not even 6x15 + 1x10 can happen, due to the value distributions.

Therefore a max damage SG blast is just technically impossible in vanilla doom, unless you use a manipulated RNG (some TASers did so).

Hmm, I've seen it various times in both demos and personal playing, in vanilla, which is what I play most of the time. I'll let you know when I see it happen in a demo. PrBoom+ has a feature that lets you follow the hp of any one thing, so it should be possible to be sure that nothing has hurt a lost soul before it's shot.

Share this post


Link to post

The "it cannot happen" consideration is based on my understanding of the SC and how shooting works (more detailed analysis can be found in other threads, for whoever wants to go anal with the details). However the shooting method itself for the SG surely uses 21 consecutive values of the P_Random table, of which only 1 out of three is used for damage.

So unless there are 7 consequential "modulo 2s" in the P_Random table separated by exactly two other values (which there ain't), a full "max damage" blast can't occur.

The above should hold true if the assumption that vanilla Doom's gameplay methods are atomic with respect to one another holds true, aka they cannot be "interrupted" by other gameplay methods who might 'steal' their RNG sequence (they may be interrupted by sound, video and and netcode though, through low-level DOS and BIOS interrupts, which shouldn't affect gameplay by design if not through obscure glitches).

Source ports ofc are fair game, and we all know how much they can be used to judge the vanilla game: zero.

Correction: I had figured this out in the older thread but forgot about it here:

Maes said:

For brevity, the actual pattern of calls to P_Random for the shotgun function was:

7x ({DAMAGE, ANGLE,ANGLE}, EXTERNAL CALLS)

Notice that "External calls" means uses of the P_Random() function outside the "Shotgun function, and can be any random number of calls. What's important, is that each pellet always uses 3 consecutive values without being disrupted (that's why I enclosed 3 values into {} brackets). The whole thing is then repeated 7 times. The SSG is very similar.

If you prefer a more IT term, the computation of angle and damage for each pellet is "atomic", e.g., cannot be disrupted by external events. The SG or SSG shot as a whole is not atomic, however.


So there, at least the SG method is partially atomic: the three calls that determine damage and TWO angles (yes, two) are atomic and can't be disrupted, but then a random (!) number of "external calls" (bullet puffs and some other shit) may be called, thus fucking up any attempt at a serious computation. Now I don't know if there's a practical limit or statistically significant behavior of those "random calls".

So with this "new" data in hand, a "max damage" blast would not be impossible, but merely highly unpredictable. The SSG is more of a nightmare to compute, as it uses 5 atomic calls to P_Random(), then also has those "random calls". 20 times over.

Share this post


Link to post

Once A_FireShotgun is called...
 Nothing special...
 P_Gunshot is called 7 times in a row...
  Every time a call is made...
   Damage is 5 * (P_Random() % 3 + 1)
   Angle offset is (P_Random() - P_Random()) << 18
   P_LineAttack is called
    Nothing special...
    P_PathTraverse is called with PTR_ShootTraverse
     If a line is hit and a puff is to be spawned (solid, not the sky and isn't a sky hack wall) P_SpawnPuff is called:
     {
      The z location of the puff is offset by ((P_Random() - P_Random()) << 10)
      in P_SpawnMobj...
       The object's last look is set to P_Random () % MAXPLAYERS
      The duration of the first frame is subtracted by P_Random() & 3
     }
     Otherwise if a thing is hit
     {
      If the thing has MF_NOBLOOD set, P_SpawnPuff is called
      {
       The z location of the puff is offset by ((P_Random() - P_Random()) << 10)
       in P_SpawnMobj...
        The object's last look is set to P_Random () % MAXPLAYERS
       The duration of the first frame is subtracted by P_Random() & 3
      }
      Otherwise call P_SpawnBlood:
      {
       The z location of the blood is offset by ((P_Random() - P_Random()) << 10)
       in P_SpawnMobj...
        The object's last look is set to P_Random () % MAXPLAYERS
       The duration of the first frame is subtracted by P_Random() & 3
      }
      If the object is to be damaged call P_DamageMobj
       If the target is not shootable do nothing and return
       If the target has no life do nothing and return
       If there is an inflictor and it's a player who isn't using a chainsaw and the target does not have MF_NOCLIP set
       {
        If the damage is less than 40, and the damage is greater than the target's life, and the difference between the inflictor and the target is greater than 64 map units
        {
         Call P_Random(), if bit 0 is set do something
        }
       }
       If damage is to be dealt
       {
        If the thing was killed call P_KillMobj
        {
         If the monster is a zombie call P_SpawnMobj to spawn a dropped object
         {
          Call P_Random to set lastlook
          }
        }
        Otherwise
        {
         If P_Random() is less than the target's pain chance, set the targets state to pain.
        }
       }
     }
So for each shotgun shot, the minimum to max P_Random calls is 3 to 10, then multiplied by the 7 shots coming out of the shotgun ramps it to 21 to 70.

---------------------------------

This is totaled at every run (random index at every count). That is, if the same thing happens for every pellet that comes out.

IF YOU SHOOT AT NOTHING AND HIT THE SKY:
Of all, Average damage: 72
Of all, Minimum damage: 45
Of all, Maximum damage: 100

IF YOU SHOOT AND HIT THE WALL:
Of all, Average damage: 72
Of all, Minimum damage: 45
Of all, Maximum damage: 105

IF YOU HIT A THING AND DAMAGE IS NOT TO BE DONE BUT PUFF OR BLOOD SPAWNS.
Of all, Average damage: 78
Of all, Minimum damage: 60
Of all, Maximum damage: 100

IF YOU HIT A THING AND IT'S SHOOTABLE AND YOU DEAL MORE DAMAGE THAN IT'S LIFE AND IT'S LIFE IS BELOW 40, AND THE DIFFERENCE BETWEEN YOURS AND IT'S HEIGHTS IS GREATER THAN 64 -OR- IF DAMAGE IS TO BE DEALT AND IT WAS NOT KILLED.
Of all, Average damage: 72
Of all, Minimum damage: 50
Of all, Maximum damage: 100


IF YOU HIT A THING AND IT'S SHOOTABLE AND YOU DEAL MORE DAMAGE THAN IT'S LIFE AND IT'S LIFE IS BELOW 40, AND THE DIFFERENCE BETWEEN YOURS AND IT'S HEIGHTS IS GREATER THAN AND IT DIES AND IT'S A ZOMBIE.
Of all, Average damage: 74
Of all, Minimum damage: 55
Of all, Maximum damage: 95

---------------------------------

So as you can see, all depends, the least damage you could do is 45 and the most is 105. But the minimum and maximum damage that a pellet does is only 5-15.

Share this post


Link to post

...da fack, dude. So the 105 theoretical maximum damage cannot be dealt to a normal monster (unless you fuck up the flags), while a round 100 damage could be dealt only under some very specific circumstances.

Now we need a histogram of the probability of every possible damage happening based on all 256 possible P_Random() index starting positions, for each of those cases, and do this analysis for EVERY weapon in Doom ;-)

I don't understand the "you deal more damage than its life" condition. Does it apply only to the damage done by a single pellet within a cycle? If so, only stuff with less than 15HP would ever be affected by that condition.

Share this post


Link to post
Maes said:

...da fack, dude. So the 105 theoretical maximum damage cannot be dealt to a normal monster (unless you fuck up the flags), while a round 100 damage could be dealt only under some very specific circumstances.


It all depends, if the same thing happened everytime (such as killing 7 imps at once).

Maes said:

Now we need a histogram of the probability of every possible damage happening based on all 256 possible P_Random() index starting positions, for each of those cases, and do this analysis for EVERY weapon in Doom ;-)


For these calculations, the same thing happens every time. Doing every deviation of it would be alot of data, but it could be done. Every time was done for simplicity but isn't always correct.

Maes said:

I don't understand the "you deal more damage than its life" condition. Does it apply only to the damage done by a single pellet within a cycle? If so, only stuff with less than 15HP would ever be affected by that condition.


If damage > thing.life, so yes... If your shotgun blast does 5 damage the thing must have at most 4 life, if it deals 10 the thing must at most 9 life, and so on...

Share this post


Link to post
GhostlyDeath said:

For these calculations, the same thing happens every time. Doing every deviation of it would be alot of data, but it could be done. Every time was done for simplicity but isn't always correct.


Not awfully so: for example, for the case of minimum external calls (0) then you can just take 21 consecutive values in the table, and use only every second one as the damage, starting with the first. This way, there will never be 7 consecutive max damages. In the case of more external calls, you can generalize e.g. every fifth...seventh etc. or whatever precise increment you must apply. And do this for all 256 possible table starting positions (with wraparound). Might do it later as a bedtime exercise ;-)

GhostlyDeath said:

If damage > thing.life, so yes... If your shotgun blast does 5 damage the thing must have at most 4 life, if it deals 10 the thing must at most 9 life, and so on...


That's really a weird condition to apply. I guess that it's part of a bunch of external methods called during shooting/melee/whatever, and so makes sense in the case of certain powerful projectiles, not in the case of single bullets. Or to catch the death condition when it occurs as it seems.

Share this post


Link to post

I went through GhostlyDeath's code analysis, and tried to count the actual number of calls to P_Random() per pellet on every possible code branch (assuming that they're all there):

  1. Hitting nothing: 3 calls, base case.

  2. Hitting a wall, with puffs: 7 calls (base case + 4)

  3. Hitting a shootable object that spawns blood or puffs: 7 calls (base case + 4)
  4. In addition to hitting a shootable object the "inflictor" condition applies: 1 extra call, 8 total.
  5. If the object is to be damaged:
    there's 1 extra call if it survives for pain chance,
    or 2 calls if it dies and spawns an object (if I understood correctly). Therefore 9 and 10 calls total, respectively
Therefore, the maximum number of calls is 10, and the possible subcases are only 3,7,8, ,9 and 10.

Of those, only some can lead to actual damage to actual monsters, with 9 and 10 calls respectively.

I made a small Java program to test the cumulative damage of 7 pellets by using the P_Random() table for damage (first call) with added bogus calls to simulate angle computations and the other code paths. This was repeated for ALL 256 possible starting indexes in the P_Random() table, and for all 3, 7,8,9 and 10 call subcases.

My summary results were:

3 calls: when you hit NOTHING, not even walls.
  • MIN: 45
  • AVG: 72.46
  • MAX: 100
7 calls: when you hit walls or stuff that bleeds/puffs but is not damaged.
  • MIN: 45
  • AVG: 72.46
  • MAX: 105 <-- Pointless, since it can't be dealt!
8 calls: when a weird "inflictor" condition applies, but the object can't be damaged afterwards, OR when it can be damaged, doesn't die, but "inflictor" doesn't apply OR when it dies and doesn't drop anything and "inflictor" doesn't apply.
  • MIN: 45
  • AVG: 72.46
  • MAX: 100
9 calls: can occur when "inflictor" occurs AND target is damaged but doesn't die, OR when inflictor DOESN'T occur but target dies AND spawns object.
  • MIN: 50 (Ha!)
  • AVG: 72.46
  • MAX: 100
10 calls: can occur when "inflictor" occurs AND target dies AND drops objects.
  • MIN: 50 (Ha!)
  • AVG: 72.46
  • MAX: 95
So what does this mean? A round 100 damage to a single target IS possible in cases of 8 and 9 calls , but as you will see in the distribution histograms I'll publish later, the chances for this happening are 4/256 for 8 calls, and 1/256 for 9 calls. Dealing 105 damage vs damageable objects is impossible. You'll be glad to know the minimum damage is 50 and not 45 though ;-)

When a player is shooting a lost soul in full health with a shotgun, all cases except the last one will fall within the "8 calls" subcase, but the last call to P_Gunshot will yield 9 calls.

So that leaves you with a 4/256 or about 1/64 chance for a 1-hit kill vs a lost soul, if I did the math right. Boy, what a mouthful :-p

The 105 damage occurrence can only occur with a 2/256 chance only vs...solid walls. Poor wall, but lucky monsters :-p

Update:

All rise, all rise, here's the One and Only Ultimate Doom Shotgun Anal-ysis.

Includes compiled Excel file with data and graphs, and Java source for the simulation.

Share this post


Link to post

Can you tell what the odds are that a shotgun blast where all the pellets hit the imp, will/won't kill the imp?

Share this post


Link to post

Sure. We consider only cases the case where 8 calls to P_Random are made, as the last fatal pellet will carry over the damage of a sequence of "straight 8s", and the "inflictor" condition, whatever it's supposed to stand for, cannot apply to 7 consecutive shots on the same target:

There are 241/256 chances that the shot will be fatal (just add up all cases where damage is equal or greater than 60.

Yeah, this only means a 94.14% chance of getting a 1-shot kill on a healthy imp. With the "inflictor" condition on all shots, the chance would actually be lower: 226/256 = 88.28%. In either case it's quite not "a shell, an imp". More like "A shell an imp...most of the time". Sorry if I shattered dreams or wrinkled e-shafts ;-)

Vs a CG dude, odds change dramatically: getting over 70 HP of damage in one shot only has a 176/256 = 68.75% chance, which seems about right.

A one-shot kill vs a healthy lost soul only has a 4/256 =1.5% chance of happening. In other words, don't bet on it.

Share this post


Link to post

Maes said:
So that leaves you with a 4/256 or about 1/64 chance for a 1-hit kill vs a lost soul, if I did the math right. Boy, what a mouthful :-p

That seems reasonable for the few yet notable times I've seen it in play or demos, against either lost souls or players in deathmatch.

Share this post


Link to post
Maes said:

Sure. We consider only cases the case where 8 calls to P_Random are made, as the last fatal pellet will carry over the damage of a sequence of "straight 8s", and the "inflictor" condition, whatever it's supposed to stand for, cannot apply to 7 consecutive shots on the same target:

There are 241/256 chances that the shot will be fatal (just add up all cases where damage is equal or greater than 60.

Yeah, this only means a 94.14% chance of getting a 1-shot kill on a healthy imp. With the "inflictor" condition on all shots, the chance would actually be lower: 226/256 = 88.28%. In either case it's quite not "a shell, an imp". More like "A shell an imp...most of the time". Sorry if I shattered dreams or wrinkled e-shafts ;-)

Vs a CG dude, odds change dramatically: getting over 70 HP of damage in one shot only has a 176/256 = 68.75% chance, which seems about right.

A one-shot kill vs a healthy lost soul only has a 4/256 =1.5% chance of happening. In other words, don't bet on it.

And lets not forget that it requires all shells hitting, all the time, and without the hitbox glitch kicking in. With those in mind, the chances in vanilla drop further (granted these aren't as big enemies as mancs or arachs, but still).

Share this post


Link to post
Guest
This topic is now closed to further replies.
×