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

Fixed values for damage outputs

Recommended Posts

I always thought that Doom's heavy reliance on RNG is a hindrance to its gameplay and skill ceiling, so I thought it could be interesting to see if it's possible to set fixed damage values for the player and the demons' attacks, like Quake did (and good results were shown), and see if it's possible to make a Doom that is "balanced" in my view. I could even use it for casual playthroughs, if it fits.

 

The aim would be to make every attack cause only its most common damage value. One example I have heard of is that the most common damage value for the Super Shotgun is about 200, so I would set it to always do only that much amount of damage.

 

I have no idea how to start with this, so any help would be much appreciated.

 

I tend to play Doom to relieve myself of stress, but losing 80hp to a single Revenant missile because of a silly mistake often just stresses me more...

 

Edit: I know it's possible and probably much easier to execute with some simple DECORATE configurations, but GZDoom is far from my sourceport of choice. I'd prefer to do these modifications with Crispy Doom, Chocolate Doom, etc.

Edited by Juza

Share this post


Link to post
3 hours ago, Juza said:

the most common damage value for the Super Shotgun is about 200, so I would set it to always do only that much amount of damage.

This point in particular is trickier since SG/SSG shots are made of multiple individual tracers. You could give each individual tracer a fixed damage; the result will still be variable depending on your aim and positioning (how many tracers connect to the target), although that can become a function of skill rather than a function of RNG. Also, is the spread pattern randomized, or fixed too?

 

Removing the damage RNG seems like something one could do with Dehacked, at least in principle. It might come from not editing the actor states, but the functions they invoke (like A_FireBullet or whatever they're called), which is probably where the dice are actually rolled.

Share this post


Link to post

You are not the first to have the idea to lessen or remove random damage values in pursuit of making doom "more skill based", and like others before you, you ignore the very important detail that it's doom's "thing behaviour" (Where does it move? When does it shoot? Does it cause infights or not, will it block my path, depending on "when" and "where?)  that induces the most RNG in the grand scheme of things (by which I mean RNG that most playerers will notice). Conversely, it's quake's "thing behaviour" that makes the entire entire concept of "fixed damage values" of monsters work, which is something classic Doom cannot "emulate" properly.

 

In fact, there is the argument to be made that skill in Doom also lies in how good players are at mitigating the effects of RNG. There is a weird "cleft" in terms of how RNG is perceived by players of different skill levels as far as I can tell. While more "casual" players sometimes blame deaths on RNG (If only that revenant rocket didn't deal 80 damage, then I would have lived), the upper echelon of skilled players tends to blame themselves for getting hit in the first place (therefore not blaming the RNG, but rather their own shortcomings). RNG only really becomes a problem when people attempt to record "optimized runs" (which most people don't), or when you're looking at maps designed specifically to be as hard as for example "dimensions" (which most people don't play), where lethality is kept extremely high at most times.

 

In other words, if I wanted to "gut" classic Doom's RNG, I'd look into thing behaviour first, and damage values second (if at all).

Edited by Nine Inch Heels

Share this post


Link to post

With DECORATE, it is definitely possible. With DEHACKED, it might not be possible without completely removing RNG from entire game via editing the RNG table. And by doing that, the game becomes broken.

Share this post


Link to post

@ReaperAA I imagine it might be possible by editing the Hex chart, since I assume the values for each attack are each individually put there, but I imagine that would be difficult to act on even if true.

 

 

@Nine Inch Heels I don't want to be rude, but your post being the second one doing this, I want to clarify I didn't try to bring discussion on Doom's RNG at all, but rather for help on how can I do something.

Share this post


Link to post
4 minutes ago, Juza said:

I don't want to be rude, but your post being the second one doing this, I want to clarify I didn't try to bring discussion on Doom's RNG at all, but rather for help on how can I do something.

If my post is the second one that's missing the point which you think you made, then maybe you didn't do a good job of making a point.

 

If you read my post in its entirety, you would have gathered that people have tried this before. From "flattening damage" (drastically minimizing the RNG range), to "fully rebalancing", it's been done already in some capacity, and the results were always a mixed bag. If you wanna see how people did that, fire up that search engine, grab the mods/WADs/DeHackEds/whatevers, and see how people went about doing stuff.

 

If you want to avoid limiting yourself to ZDoom family ports, you're gonna have to look into DeHackEd. A simple search with google shows several tutorials that are available online on YouTube and elsewhere, so that's easy enough to find.

Share this post


Link to post
1 hour ago, Nine Inch Heels said:

If my post is the second one that's missing the point which you think you made, then maybe you didn't do a good job of making a point. 

 

This is the Doom Editing board, for editing-related discussions. Does that not say enough?

I believed I wouldn't have to explain further because it just seems obvious to me this is a board for discussing editing, and helping others with editing. Not for subjective matters such as "which is the better option" or "if you were a skilled player you would think this way instead". I would go for Doom General and post "What do you guys think about Doom RNG", and the point of my post of clearly far from that; If I wanted to discuss the matter you are trying to bring into my topic, in my original post I would in any way imply that I'm looking for opinions, which I did not do nor ask in any way.

 

(tl;dr?) Sorry for my rudeness, but I must say that you're clearly primarily looking to change my views in this matter rather than trying to help. I did not ask what you think of my views. Although I value your opinions, I don't believe this is the place for them.

 

1 hour ago, Nine Inch Heels said:

If you want to avoid limiting yourself to ZDoom family ports, you're gonna have to look into DeHackEd. A simple search with google shows several tutorials that are available online on YouTube and elsewhere, so that's easy enough to find.

 

I'll give another look into DeHackEd, but I don't believe it can help me achieve damage value re-configurations accurate to what I'm looking for... I did search and could not find anything related to dehacked and RNG reconfiguration.

 

Share this post


Link to post

dehacked can change the base damage value of projectiles but not the dice-roll that gets multiplied to them. in OG doom, these damage multipliers are hardcoded, as are the base damage values for all melee and hitscan attacks. If you were amenable to playing a modified exe it wouldn't be too much trouble to go through p_enemy.c and replace all the damage variables with static values of your choosing. otherwise zdoom is gonna be the only way to accomplish what you're looking to do. I'm not an expert, but my first instinct would be to redefine the enemy states in decorate and replace their attack codepointers with ones where you can explicitly control the damage values, e.g.:

 

https://zdoom.org/wiki/A_CustomMeleeAttack

https://zdoom.org/wiki/A_CustomMissile

 

I have vague memories of a project like this being posted on doomworld before, maybe it was called Deterministic Doom? I could be wrong.

Share this post


Link to post

So, in theory, if I were to make a sourceport with Doom's original code, or modify the code of an existing open sourceport, I could modify these hardcoded values. A lot easier than expected.

Very helpful post, thanks a lot @Ribbiks

Edited by Juza

Share this post


Link to post

Exactly, here are some of the specifics (line numbers from the current prb+2.5.1.7 src: https://github.com/coelckers/prboom-plus )

 

$ grep -nr "damage = " ./ | grep "P_Random"
.//p_map.c:577:      int damage = ((P_Random(pr_skullfly)%8)+1)*tmthing->info->damage;
.//p_map.c:638:      damage = ((P_Random(pr_damage)%8)+1)*tmthing->info->damage;
.//p_pspr.c:530:     damage = (P_Random(pr_punch)%10+1)<<1;
.//p_pspr.c:573:     damage = 2*(P_Random(pr_saw)%10+1);
.//p_pspr.c:758:     int damage = 5*(P_Random(pr_gunshot)%3+1);
.//p_pspr.c:831:     int damage = 5*(P_Random(pr_shotgun)%3+1);
.//p_enemy.c:1299:   damage = (P_Random(pr_posattack)%5 + 1)*3;
.//p_enemy.c:1317:   int damage = ((P_Random(pr_sposattack)%5)+1)*3;
.//p_enemy.c:1336:   damage = ((P_Random(pr_cposattack)%5)+1)*3;
.//p_enemy.c:1402:   damage = (P_Random(pr_troopattack)%8+1)*3;
.//p_enemy.c:1416:   int damage = ((P_Random(pr_sargattack)%10)+1)*4;
.//p_enemy.c:1423:   int damage = ((P_Random(pr_sargattack)%10)+1)*4;
.//p_enemy.c:1436:   int damage = (P_Random(pr_headattack)%6+1)*10;
.//p_enemy.c:1459:   damage = (P_Random(pr_bruisattack)%8+1)*10;
.//p_enemy.c:1586:   int damage = ((P_Random(pr_skelfist)%10)+1)*6;
.//p_enemy.c:1986:   damage = (P_Random(pr_skullfly)%8+1)*actor->info->damage;

 

basically you'd want to remove all the P_Random() calls and replace those with some hard-coded values (you can pick and choose if you want to keep randomness for the player's attacks as well). It obviously goes without saying that any demos recorded with the modified exe will immediately desync for everyone else :p

Share this post


Link to post
11 hours ago, Juza said:

Although I value your opinions, I don't believe this is the place for them

 

I'm not sure if there's something wrong with your perception, but if you yourself include an opinion of yours in the OP, then I myself can include my opinion on the matter in my reply. Yes, it's the editing subforum, but it's still a forum. Just to refresh your memory:
 

On 2/14/2020 at 1:15 AM, Juza said:

I always thought that Doom's heavy reliance on RNG is a hindrance to its gameplay and skill ceiling

 

Don't complain about people commenting on this POV of yours when you yourself put it up for discussion.

 

As for what ribbiks pointed out, I would at least consider that a hardcoded exe is a lot less "mobile" than a decorate, or a dehacked. The moment you want to play something that requires GZDoom, a modified PrB+exe isn't going to help you any more. Likewise, when it's something that requires GZDoom, but for some reason the newest version of it, then an older modified GZDoom.exe would also be obsolete.

 

On 2/14/2020 at 1:15 AM, Juza said:

I tend to play Doom to relieve myself of stress, but losing 80hp to a single Revenant missile because of a silly mistake often just stresses me more..

So, if it's spike damage you worry about, you wouldn't actually need fixed damage values, as you could simply "nerf" the most egregious monster's base damage to a point where a "high roll" deals for example 60 damage instead of 80 (with every other damage roll also being weaker). I get that this is not deterministic, but it's an easily available "cure" that can be put into an external, compact, and therefore "mobile" file, which makes the whole thing a lot more flexible.

 

As for ways how people in the past were looking to rebalance doom, here's one of them:
https://forum.zdoom.org/viewtopic.php?f=43&amp;t=63293&amp;sid=2421e245d97dda599bcd3e4029e3fb21

Quote

Enemy damage is no longer random and has been averaged

Play this and see if what you're about to put work into is actually what you're looking for.

Share this post


Link to post

Once again, I did not in any way imply in the OP that I wanted to engage in a discussion over my reasoning, which I stated primarily to give better light to what I'm actually trying to achieve, but it seems it was futile anyways, so I possibly didn't make myself clear enough at all, as you said. But overall, I tried to avoid the type of posts that are exactly such as your first in this thread: You attempted to tell me that in truth, I am ignorant to the actual 'problems' you believe I'm running into, which I am not. You were putting distrust into my question, which you had no reason to do so, since I had never mentioned I had issues with 'thing behavior', so you were going off on pre-conceptions, which I took offense for. When I said I didn't want to discuss any more than that, you told me that I was in the wrong, in a way that I interpreted as condescending, which I took offense for, and it was dumb of me.

 

I believe neither of us are in the right here, so I end my posts here. This was all quite childish of me and I'll avoid it in the future.

In the end I'm happy for I've achieved what I wanted to do, thanks to all who helped.

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×