Page 9 of 41

Re: DOOM Eternal [Engine:idTech 7]

Posted: Tue Mar 24, 2020 10:53 pm
by SunBeam
zsh wrote:
Tue Mar 24, 2020 10:51 pm
First off, awesome work you do here SunBeam. That being said, you can't switch difficulty to Ultra Nightmare in an existing save slot. You need to start a new save and select Ultra Nightmare at the beginning because it locks you into that difficulty.
That's from user perspective. If you check my post above, you'll see you can change it. Read along :)

Come to think about it, I think I can also find the spot to unlock it. Simply find all references to the idGameLocal::GetGameMode and see which one checks for Ultra Nightmare when I try to change mode in Settings ;) Should be simple enough.

Re: DOOM Eternal [Engine:idTech 7]

Posted: Tue Mar 24, 2020 10:55 pm
by zsh
SunBeam wrote:
Tue Mar 24, 2020 10:53 pm
zsh wrote:
Tue Mar 24, 2020 10:51 pm
First off, awesome work you do here SunBeam. That being said, you can't switch difficulty to Ultra Nightmare in an existing save slot. You need to start a new save and select Ultra Nightmare at the beginning because it locks you into that difficulty.
That's from user perspective. If you check my post above, you'll see you can change it. Read along :)
I was simply referring to being able to change it by default in the game :)

Re: DOOM Eternal [Engine:idTech 7]

Posted: Tue Mar 24, 2020 11:47 pm
by SunBeam
SamIam76 wrote:
Tue Mar 24, 2020 7:03 am
Knightmare077 wrote:
Tue Mar 24, 2020 1:46 am
Alright Sun,

I kneel before your superior badassery.

If , when , you get a chance please look into the gore_neverFadeAndRemove option and see if you can get it functional.

It's like the command isnt tied to the games exe , calling the wrong memory address?! I'm not even sure I know what the heck I'm talking about but I've stared at this....and stared at this..I feel like I'm trying to decode the matrix and was unplugged while I was still inside.

🤯
Dear SunBeam,

thanks for your work!
I can completely follow Knightmare. We need that gore_never_FadeAndRemove command to work!!
It completely breaks atmosphere and looks cheap as hell when decals fade or burn that way. It's not a 2020 standard and nor it was in 1993!
It really could be that the game just doesn't accept that command. It was the same with Legacy Mod. First it worked, then after another patch it stopped working. So it had to be updated.
Maybe there is another command which already has the same functions!?

Thanks for help!
Alright.. let's try and do this. I'll cross-reference this with DOOM 2016 (which I still have installed). We'll see what comes out of it. Try to keep up.

Start game, attach x64dbg to it, then F9 till game is resumed. Then Symbols > right-click on 'doometernalx64vk.exe' and 'Follow in Disassembler'. Then right-click in this window and Search for > Current Module > String references. Let the process complete (takes 2-3 minutes), then in the Strings list paste in gore_neverFadeAndRemove. I see this:

Image

Double-click that so you follow it in the disassembler view. And we see this:

Image

The pointer right below that line is the CVar top; follow it in dump:

Image

From testing on the g_permaGodMode CVar, there were a lot of references to that CVar's top in the game code:

Image

The first one is the LEA you also saw for the gore_neverFadeAndRemove CVar. The rest of the MOVs are where the CVar is read in game code, thus where it's used.

Can't say the same for gore_neverFadeAndRemove CVar:

Image

There's only the LEA CVar reference, but no usage in game code. Now this is where DOOM 2016 should come in useful, where, I hope, I will find more than the initializer LEA.

Be back with more later,
Sun

Re: DOOM Eternal [Engine:idTech 7]

Posted: Wed Mar 25, 2020 12:35 am
by SunBeam
Hahaha, one more update from the developers :P

Re: DOOM Eternal [Engine:idTech 7]

Posted: Wed Mar 25, 2020 1:06 am
by SunBeam
Alright, found the CVar usage in DOOM 2016. Pray the code is somewhat identical in DOOM Eternal.

The way I noticed the "Keep The Dead 0.5" mod works is by tampering several CVars in a .cfg file (DOOMConfig.cfg) placed in the %UserProfile%\Saved Games\id Software\DOOM\base. Now.. since _emoose_'s is a proxy .dll (dinput8.dll), the patching, restrictions removal and all the other shit happens the moment the game is started. Meaning BEFORE the Engine is even initialized. Then I noticed the Engine basically reads the .cfg and string-resets the CVars the guy put there:

Code: Select all

ai_death_FadeDelay 60000
breakable_NoFadeAndRemove 1
gore_neverFadeAndRemove 1
mancubus_deadGKHideDemonTime 600000
mancubus_deadHideDemonTime 600000
mancubus_deadLavaHideDemonTime 600000
corpseManager_MaxTime 600000
ai_maxCorpses 300
corpseManager_MaxEntities 300
gore_maxLivingGoreEnts 500
corpse_optimzationStartTime 600
decal_goreBloodPoolPriority 100
decal_forcefadeoutduration 600000
g_bloodspherescale 35.0
g_gorebloodsphereexpanddistance 75
encounterscript_globalmaxai 48
decal_maxdecalsinradius 40
decal_maxdecalgroupingradius 400.0f
g_goresplashjointsused 32
r_decalclusteringnumdecalsperjob 48
g_breakabledebugdecals 1
r_decalLifetimeMultiplier 32
g_entitypoolmode 0
r_rendergatherdecalsgranularity 32
g_breakablefloorsplatfromceiling 1
Am assuming those are the CVars to be changed in DOOM 2016 to keep almost any mob in the map, without fading away or whatnot.

Now.. with my table.. you would have to be at main menu to activate the scripts. Which means the values above will NEVER be set, as the restrictions _emoose_'s dinput8.dll removes never happen (which should when the Engine runs the CVars reset, BEFORE initialization). So that might be one obstacle to get over, which I'm not sure these guys have realized so far :) Which brings me to yet again getting you guys to really start learning what's under the hood of some hack others created and not rely blindly on the fact that if you change 1 CVar, things will work in any DOOM game from now on "cuz it worked in DOOM 2016"..

Then the CVar in question these guys are looking for is 'gore_neverFadeAndRemove'. I highly doubt it's the command responsible for keeping the mobs in the map without fading, in absence of all of the others modified, but sure..

Image

There's only one reference of this CVar being used in the game code and that is the one above.

I'll look for the piece of code in Eternal and possibly patch it so it reads the CVar and makes use of it. But then if things don't actually work as "it worked in DOOM 2016", then I'm out :) Deal?

BR,
Sun

Re: DOOM Eternal [Engine:idTech 7]

Posted: Wed Mar 25, 2020 1:10 am
by Knightmare077
Christ, Sun, How did you learn all this?

I had a barbarian best guess that it pointed to a incorrect address..

I'm telling you, It would've taken me a really,really long time to just come up with what you just shown , never mind even know where to begin to try and fix it?!

You said "you run the ropes here" no Sun.,...You are the damn ropes.

I think a large portion of the modding community rests squarely on your and a few others shoulders at this point as you know and I know the devs arent going to "support" mods. If they were ; they would've left this stuff in. Its fucking stupid that they strip it out, this is where the fun is after you've beat the game etc?!.

I hope you can fix the cvar bud, truly, and hopefully don't let us drive you nuts with requests to where you just quit.

Re: DOOM Eternal [Engine:idTech 7]

Posted: Wed Mar 25, 2020 1:13 am
by SunBeam
Knightmare077 wrote:
Wed Mar 25, 2020 1:10 am
...
Do confirm what I said above. Those are all of the CVars you wanna mod in Eternal? Of course, excepting some mob-classified ones, which should be different in Eternal (e.g.: mancubus_deadGKHideDemonTime; does Eternal have this shit? I know the CVars are still there).

Re: DOOM Eternal [Engine:idTech 7]

Posted: Wed Mar 25, 2020 1:13 am
by Knightmare077
I am the author of that mod, and deal. like I have a choice lol :) yes those are them

Re: DOOM Eternal [Engine:idTech 7]

Posted: Wed Mar 25, 2020 1:16 am
by Knightmare077
SunBeam wrote:
Wed Mar 25, 2020 1:13 am
Knightmare077 wrote:
Wed Mar 25, 2020 1:10 am
...
Do confirm what I said above. Those are all of the CVars you wanna mod in Eternal? Of course, excepting some mob-classified ones, which should be different in Eternal (e.g.: mancubus_deadGKHideDemonTime; does Eternal have this shit? I know the CVars are still there).
yes most of them
gore_maxLivingGoreEnts (not in eternal)
g_bloodspherescale 35.0 (not in eternal)

mancubus stuff is present.

Re: DOOM Eternal [Engine:idTech 7]

Posted: Wed Mar 25, 2020 1:17 am
by SunBeam
Knightmare077 wrote:
Wed Mar 25, 2020 1:13 am
I am the author of that mod, and deal. like I have a choice lol :) yes those are them
The name is a dead giveaway, so I knew it's you, LOL :P Alright, I'll see if I can find that code. But please read what I said earlier: this may need a proxy .dll, like infogram/emoose's so the restrictions happen before the Engine initializes. If the patches are applied early on, then the read of the .cfg and resetting of the CVars will go nicely before you even see the main menu :) Otherwise, I dunno. You'll see if they stick when changed directly in the console. I just hope the timers you set there aren't a ONE-TIME read and set..

P.S.: This is what the file should be called:

Image

The number of references to either config file is 8 in both DOOM and DOOM Eternal, which means the developers have not stripped any code. So loading the shit from the .cfg should work.

Re: DOOM Eternal [Engine:idTech 7]

Posted: Wed Mar 25, 2020 1:20 am
by Knightmare077
SunBeam wrote:
Wed Mar 25, 2020 1:17 am
Knightmare077 wrote:
Wed Mar 25, 2020 1:13 am
I am the author of that mod, and deal. like I have a choice lol :) yes those are them
The name is a dead giveaway, so I knew it's you, LOL :P Alright, I'll see if I can find that code. But please read what I said earlier: this may need a proxy .dll, like infogram/emoose's so the restrictions happen before the Engine initializes. If the patches are applied early on, then the read of the .cfg and resetting of the CVars will go nicely before you even see the main menu :) Otherwise, I dunno. You'll see if they stick when changed directly in the console. I just hope the timers you set there aren't a ONE-TIME read and set..

I'll see if I can speak with emoose to make a proxy .dll from your file as I think it's your tables he did the legacy mod .dll with anyway.

Re: DOOM Eternal [Engine:idTech 7]

Posted: Wed Mar 25, 2020 1:22 am
by SunBeam
Knightmare077 wrote:
Wed Mar 25, 2020 1:20 am
I'll see if I can speak with emoose to make a proxy .dll from your file as I think it's your tables he did the legacy mod .dll with anyway.
That I can code myself. Been talking to him a while ago, like 2-3 weeks, about something else. Not sure if he's gonna code a DLM for Eternal.

Re: DOOM Eternal [Engine:idTech 7]

Posted: Wed Mar 25, 2020 1:34 am
by Knightmare077
Knightmare077 wrote:
Wed Mar 25, 2020 1:20 am
SunBeam wrote:
Wed Mar 25, 2020 1:17 am
Knightmare077 wrote:
Wed Mar 25, 2020 1:13 am
I am the author of that mod, and deal. like I have a choice lol :) yes those are them
The name is a dead giveaway, so I knew it's you, LOL :P Alright, I'll see if I can find that code. But please read what I said earlier: this may need a proxy .dll, like infogram/emoose's so the restrictions happen before the Engine initializes. If the patches are applied early on, then the read of the .cfg and resetting of the CVars will go nicely before you even see the main menu :) Otherwise, I dunno. You'll see if they stick when changed directly in the console. I just hope the timers you set there aren't a ONE-TIME read and set..

I'll see if I can speak with emoose to make a proxy .dll from your file as I think it's your tables he did the legacy mod .dll with anyway.
most of the commands for corpses etc carried from level to level in eternal...

The issue for me in 2016, Corpses couldn't be kept permanently due to spawn cap. game sees "dead a.i" as "active a.i" well certain pieces of enemies anyway, thus you met that limit at or around 25 dead a.i. a limit that couldn't be changed or ignored. so I worked around the spawn limitation using timers. Effectively postponing fade out for 1 minute. It seemed to work as best as possible, without breaking the game.

Re: DOOM Eternal [Engine:idTech 7]

Posted: Wed Mar 25, 2020 2:02 am
by sebastianyyz
Alright, thanks to SunBeam you can use god mode on Ultra Nightmare, use the folowing code:

pm_disableNighmareGodMode 1

All credits go to SunBeam, thank you very much, you are the man


SunBeam do you have a similar table for Doom 2016?

Re: DOOM Eternal [Engine:idTech 7]

Posted: Wed Mar 25, 2020 2:25 am
by gir489

Code: Select all

{ Game   : DOOMEternalx64vk.exe
  Version: NODRM
  Date   : 2020-03-24
  Author : gir489

  Infinite red sword energy
}

[ENABLE]

aobscanmodule(RedSwordAmmo,DOOMEternalx64vk.exe,F3 0F 10 41 08 C3 CC CC CC CC CC CC CC CC CC F3) // should be unique
alloc(newmem,$1000,"DOOMEternalx64vk.exe"+15285B1)

label(code)
label(return)

newmem:
  mov [rcx+08], (float)3
code:
  movss xmm0,[rcx+08]
  jmp return

RedSwordAmmo:
  jmp newmem
return:
registersymbol(RedSwordAmmo)

[DISABLE]

RedSwordAmmo:
  db F3 0F 10 41 08

unregistersymbol(RedSwordAmmo)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "DOOMEternalx64vk.exe"+15285B1

"DOOMEternalx64vk.exe"+152859B: CC                       -  int 3 
"DOOMEternalx64vk.exe"+152859C: CC                       -  int 3 
"DOOMEternalx64vk.exe"+152859D: CC                       -  int 3 
"DOOMEternalx64vk.exe"+152859E: CC                       -  int 3 
"DOOMEternalx64vk.exe"+152859F: CC                       -  int 3 
"DOOMEternalx64vk.exe"+15285A0: 48 8B 05 59 CC C2 04     -  mov rax,[DOOMEternalx64vk.exe+6155200]
"DOOMEternalx64vk.exe"+15285A7: 83 78 08 00              -  cmp dword ptr [rax+08],00
"DOOMEternalx64vk.exe"+15285AB: 75 04                    -  jne DOOMEternalx64vk.exe+15285B1
"DOOMEternalx64vk.exe"+15285AD: 0F 57 C0                 -  xorps xmm0,xmm0
"DOOMEternalx64vk.exe"+15285B0: C3                       -  ret 
// ---------- INJECTING HERE ----------
"DOOMEternalx64vk.exe"+15285B1: F3 0F 10 41 08           -  movss xmm0,[rcx+08]
// ---------- DONE INJECTING  ----------
"DOOMEternalx64vk.exe"+15285B6: C3                       -  ret 
"DOOMEternalx64vk.exe"+15285B7: CC                       -  int 3 
"DOOMEternalx64vk.exe"+15285B8: CC                       -  int 3 
"DOOMEternalx64vk.exe"+15285B9: CC                       -  int 3 
"DOOMEternalx64vk.exe"+15285BA: CC                       -  int 3 
"DOOMEternalx64vk.exe"+15285BB: CC                       -  int 3 
"DOOMEternalx64vk.exe"+15285BC: CC                       -  int 3 
"DOOMEternalx64vk.exe"+15285BD: CC                       -  int 3 
"DOOMEternalx64vk.exe"+15285BE: CC                       -  int 3 
"DOOMEternalx64vk.exe"+15285BF: CC                       -  int 3 
}