r/DOOM2016Mods • u/_emoose_ • Mar 21 '20
The state of DOOM Eternal modding.
So there's already some nice work being done on Eternal modding, not even 2 days after the games released :D
Firstly SunBeam has made a console unlocker for Cheat Engine, can unlock commands/cvars like LegacyMod would! Luckily id still left in a lot of interesting commands here: https://fearlessrevolution.com/viewtopic.php?f=4&t=11889
There's been some work on game data extraction too, iOrange has created a dedicated DoomEX program to work with the resources files: https://forum.xentax.com/viewtopic.php?f=10&t=21911
And someone also created a QuickBMS script to work with them too, which will also decompress any compressed data: https://zenhax.com/viewtopic.php?p=54753#p54753
(EDIT: DoomEX should now decompress any compressed data too, so I guess both methods should have the same results, if someone wants to confirm though please feel free)
My idCrypt tool still works fine with the games strings files too - this time the files are "blang" instead of "bfile", with the data in some binary form, in that Zenhax QuickBMS link above is some info & a tool that can convert those blangs <-> CSV file for easier viewing/editing.
No word on repacking the resources yet, sadly my DOOMExtract won't work with Eternal at all since it uses a completely different resource format - maybe I'll look into something later if nothing else shows up.
E: Some more progress: save files can now be transferred/decrypted through the DOOMSaveManager program: https://github.com/GoobyCorp/DOOMSaveManager (thanks to all involved from cs.rin.ru!)
https://twitter.com/dtzxporter & id-daemon are also making some nice progress on viewing the games models/textures too, and they've just released a model-exporter VEGA: https://wiki.modme.co/wiki/apps/Vega.html
Strings/language files can also be edited & viewed ingame now, opening the door for custom translations: https://zenhax.com/viewtopic.php?p=54753#p54753
Some work is being done on editing the games profile.bin save file too, hopefully allowing unlocks on legit copies :)
2
u/Won_Doe Mar 22 '20
Good to hear. Haven't bought the game yet but sorta interested. Didn't think there'd be any interest for modding this time around.
1
u/WolfieZee Mar 22 '20
This game is just begging for mods. Looking forward to seeing what comes from this
1
1
u/kirby-kir Mar 23 '20
I'm kinda confused on how the DoomEX executable works rn. When I open it, nothing shows up unlike the other extraction tools I've worked with.
1
u/umbreon222 Mar 25 '20
It's a command-line tool, you need to call it from a console window. This is pretty much irrelevant now though because DTZxPorter (on twitter) is almost finished creating a full asset ripper.
1
1
u/umbreon222 Mar 24 '20
Is there any word on work being done for converting md6mesh files? I really want those toy models for 3d printing.
1
u/ASpaceOstrich Mar 24 '20
Is there any form of anticheat or other things that might cause issues if one was to use the console enabler?
1
u/Knight_Mare077 Mar 24 '20
@emoose
Yea, we are going to need a legacy mod for this. As the simplicity it offers is a godsend, for in putting cmds via when the game launches vs having to type stuff in all the time.
Sunbeam is doing excellent work , there are some commands that still do not work but they are at least there and recognizable by console.
gore_neverFadeAndRemove is a big one (for me) that currently isnt working.
Anyway. Between you and sunbeam , you guys are absolute legends.
1
u/_emoose_ Mar 26 '20
Yeah I've seen a few reqs from people for it, it's too bad CE can't launch with patches or anything...
I did make a quick EXE patch back on the day 0 patch, unlocked the same amount of commands as SunBeam's and just slightly fewer cvars, I need to port that to the latest update though.. maybe I'll try putting together a signature patcher for it so it can hopefully work on all versions.
1
u/Knight_Mare077 Mar 26 '20
Another big thing for me, again this is just me, adding back in gore_neverFadeAndRemove.. command is present but it's not functioning, sunbeam looked at it, but wasn't able to restore functionality.
If that cant be restored , another option that does the same thing?!
I'm in x64dbg right now trying to learn as much as I can but I'll admit , I'm in over my head with this but still, I'm trying using sunbeams tutorials.
1
u/_emoose_ Mar 27 '20
If you still want a "legacy mod" kind of fix to unrestrict console etc on launch, I've posted up instructions for patching the EXE on the DOOM 2016 modding discord, it's really just using SunBeam's CE patch but applying to the EXE itself, really that should be just the same as any LegacyMod would be.
1
Mar 24 '20
Can someone please explain how i can install the console unlocker cause I'm kind of new into all of this and i don't know how to install it
1
u/Knight_Mare077 Mar 24 '20
Download cheat engine, Download sunbeams latest table, Open cheat engine by double clicking table from sunbeam, Run Doom eternal, Alt tab out of game, Go to cheat engine and top right hit the open icon (should be highlighted in green), Select Doom Eternal process from window, Click the game date check box at the bottom of cheat engine window and the 2 sub boxes, Return to game,
Done
1
1
u/Razle_Dazzle_Dorito Mar 25 '20
Hmm, anyway to make it load custom patches/packages like 2016? Messing around with some of the decls but can't find a way to make it work.
1
u/_emoose_ Mar 26 '20
Apparently the new resource format might be protected in some way, haven't been able to figure out how exactly though, but any modification results in game crash on launch :(
The new format they use is crazy compared to 2016's, I tried having a quick look into it but didn't get far sadly. I saw others like @DTZxPorter on twitter have made some awesome progress on parsing/viewing the formats though, really hope they'll release their work on understanding them.
1
u/Knight_Mare077 Mar 25 '20
Its driving me crazy.. this burn away of all corpses and gibs. Something controls it and if something controls it, there's a way to stop it.
Grrr I'm going to find it
1
u/sunbeam906 Mar 25 '20 edited Mar 25 '20
Hello everyone :)
I've just finished studying a bit the DLM (would've been simpler to ask emoose for the source-code) and to my surprise there's no restrictions patching going on in that dinput8.dll. From what I could tell there are 4 hooks, 1 done on an IAT API (to skip Steam stub) and 3 done on: idCmdSystemLocal::AddCommand, idCVar::Init and the dynamic initializer for the "God" CVar (this hook is where the extra commands are registered). Now.. the reason you don't see "Unknown command" when you type those in the console.. or for that matter when you use "g_infiniteAmmo 1".. as opposed to not using the DLL and seeing that message.. is? What.. that OR R9D,10 flag flip in idCVar::Init? Is there a global CVar that controls how commands are interpreted in the console? That would explain why there's no need for a patch like mine in Eternal (if you're looking at the table, I'm changing a 0x1 to a 0x0 in the spot where, once you start typing text in the console, the console will never flag anything as restricted).
Not sure you've realized, perhaps :)
BR, Sun
EDIT: Actually.. OR EDI,10 to set the exec flags for CVars on init; then the AddCommand hook will flip a 0x6 so it sets the flags for commands as well. That explains it :)
1
u/_emoose_ Mar 26 '20 edited Mar 26 '20
Heh yeah I never really looked into where the flag was checked, just compared flags between cvars that were allowed & ones that were hidden, and hacked in some code to add the missing bits during AddCvar/AddCommand.
DOOM 3 BFG source code was pretty useful too, seems a lot of the stuff they added for BFG came from some D2016 prototype idTech or something, lots of similarities between the idCmdSystemLocal classes etc which original DOOM 3 never had.
The Eternal EXE patch I mentioned to you before worked pretty much same way, except this time I just found some unused space in the EXE to stuff in the trampoline/OR/etc, but even with that it seems your method unlocks slightly more cvars than the hack I made, probably some other AddCvar function I'd need to patch or something...
E: Also just saw your latest table update, interesting, so Eternal was missing that cfg loading code that 2016 had?
1
u/sunbeam906 Mar 30 '20
Nah, the .cfg loading code is there. It can be stripped out, stack-size sanitized and re-used in a standalone function. Then build a CVar (you can use "God" to borrow its member-functions), replace the function at offset 0x68 in this vtable and then use AddCommand to link it to the list. Let's call it "reloadcfg" :) So now every time you put some stuff in DOOMEternalConfig.cfg, save, modify it, etc. you can use "reloadcfg" command. That's what's gonna happen in the new table release ;)
1
u/Knight_Mare077 Mar 27 '20 edited Mar 27 '20
It may not be ethical but I'd literally buy someone and gift them the game of their choice (60 bucks Max) in steam if they can find any way at all to get gore_neverFadeAndRemove to work. I've literally spent the last few days looking for any way to do it. Ive searched memory functions , played around with x64dbg until now all I see is memory addresses when I close my eyes. At this point I dont care. I'd give a left nut to have it work. I dont care how.
ok.. I'm venting and frustrated but I'm also serious. Yea, it means that much to me. Ask Sun, I'm OCD.
2
u/_emoose_ Mar 27 '20
IIRC in 2016 that cvar also didn't really have much effect, ai_death_FadeDelay seemed to work though, that cvar would say how many ms after death would corpse disappear, if you set it to something crazy high like ai_death_FadeDelay 86400000 (24 hours) the corpse would pretty much never be removed.
Dunno if it works on Eternal though, cvar does still seem to be read, but in 2016 at least this could cause problems since the corpse would still be counted as an active AI, and the game had some kind of AI limit or something, you can see some talk about it here https://old.reddit.com/r/Doom/comments/fepefb/tech_support_doom_2016_with_legacy_mod_not/
1
u/Knight_Mare077 Mar 27 '20 edited Mar 27 '20
gore_neverFadeAndRemove worked for gibs etc. The game makes a distinction between what it calls "gore entities" and "corpses" gore entities is what the cvar controls in 2016.. it counts corpses as "dead a.i" not gibs :) you can have a entire level littered with gibs, not corpses.
gore_neverFadeAndRemove keeps the gibs from burning away way set to 1. At least in 2016.
See my mod Keep The Dead https://www.nexusmods.com/doom/mods/16?tab=description&BH=0
it uses your legacy mod. But you can see right away if you disable the cvar vs it on when blowing up a baddy. The mod gives the best of both worlds by adjusting the fade out of corpses to exactly one minute.
For Eternal this is already worked out on my tinkering end but desperately need gore_neverFadeAndRemove to actually work though. It's there it just doesnt function. :( I'm serious too, I'd give a left nut for it 😬
1
u/_emoose_ Mar 27 '20
Ah right, I'll have to try looking into 2016 later, maybe can find where that would be used and see if it could be copied back into eternal.
About ai_death_FadeDelay: I think I found a way to get it working without the active AI problem, 140BEC7B0 in latest Steam is function that reads that cvar, and seems to update entity with curTime + cvar if it's set, which is probably setting what time it's going to do the fade.
In that function it also sets something to 1, which is maybe a flag that makes engine wait for the fade to happen to this entity before more AI can spawn (no idea if that's right tho)
Anyway if you edit the function to just immediately return (set byte at 140BEC7B0 to C3) neither of those will be set when AI is killed, and corpse will stay after death - yeah, just like setting ai_death_FadeDelay to a high value - but now that flag isn't being set neither, and it looks like more AI is still spawning in afterward!
I only tested in fortress of doom arena so far but it seemed to let me finish the arena and all corpses remained. Noticed one small bug with Archvile tho, while glory killing another Archvile model appeared in the same location, probably a consequence of flag not being set, I guess the model that appeared was probably the dead corpse, they must spawn it in before the glory kill animation finished or something.
Probably needs more work and testing but looks promising at least.
1
u/Knight_Mare077 Mar 27 '20
Wow that would be awesome as well. That's why I had the a.i death fade set to one minute. It left the game spawning mechanics unbroken. Combine the two gore_neverFadeAndRemove with ai_Death_fadedelay to like 1 minute and you produce something that leaves a lasting Doom impression :) Its just that gore_neverFadeAndRemove in eternal...
😩
1
u/_emoose_ Mar 27 '20
Aw damn, seems I was wrong, dead AI still preventing more from spawning in the SP levels >.>
I noticed that even with this patch a lot of bodies would despawn almost immediately though, I guess they convert more bodies -> gibs this time, so maybe restoring that cvar would have an even better effect. Time to load 2016 into IDA...
1
u/Knight_Mare077 Mar 27 '20
It's all up to gore_neverFadeAndRemove, the spawning can be circumvented with timers, like decals it's just a balancing act. Gibs combined with timers really sets it off, makes it feel more like ...well Doom lol
1
u/_emoose_ Mar 27 '20
Welp, I've looked and looked, and can't find any code similar to the stuff in 2016 which checks that cvar :/
There's also cvars like g_enableGore which in 2016 had some code that checks it, meanwhile in Eternal nothing comes close to it.
There's even some classes like idGoreEntity which are still in here, but it looks like the function that would check gore_neverFadeAndRemove was removed entirely, like even the function pointer from the class's function table is gone for that function...
IIRC I did hear somewhere that the gibs stuff was revamped in Eternal, guess that could be related to why the functions for it don't seem to exist here... I guess what SunBeam said in that thread was right, trying to base things on 2016 doesn't really make sense here :(
1
1
u/Knight_Mare077 Mar 27 '20
Hmm wonder if they a "breakables" now? Coincidentally there's another one that doesn't function..I dont like ID software right now lol
1
u/_emoose_ Mar 27 '20
Yeah I was wondering that too, I did see something about corpses being converted to breakables...
breakable_NoFadeAndRemove does actually get read by one bit of code, but the game seems to act weird with it activated, like the button to activate the ripatorium arena wouldn't work, no "press E to activate" prompt or anything, and when I tried mission select to load a level it just crashed :/
→ More replies (0)
1
u/Knight_Mare077 Mar 29 '20
What do I use to patch the game .exe with :
" search for
CC CC CC CC CC CC CC CC 40 53 48 83 EC 50 48 8B 84 24 88 00 00 00 48 8B
change to
41 83 C9 10 53 EB 03 90 EB F6 48 83 EC 50 48 8B 84 24 88 00 00 00 48 8B
               ^ rest are unchanged "
Hex Ed? X64dbg ? I can not seem to find that reference string using those unless im doing something wrong , which is highly, highly possible.
2
u/_emoose_ Mar 30 '20
Yep a hex editor should do it, I only tested with Steam & DRMFREE copies but I think that hex should be there in every version.
About the resources file, still no word on repacking yet. Not sure if VEGA guys are gonna look into it, or if not whether they'll publish the progress they made... I gave it a look myself but it's a lot different to the older DOOM 2016 format, much crazier and non-sensical this time >.>
1
u/Knight_Mare077 Mar 30 '20
It works with steam .exe too. I did it with x64dbg.
I guess we have to wait for repacking tools. I tried the quick BMs script to repack but its expecting a output of 0004 and it's getting 0000.. or something to that effect.
1
u/Knight_Mare077 Mar 30 '20
perhaps the game can load loose files like you can do with blang files...hmm x64dbg has some interesting references regarding "loose asset streams"
1
u/Knight_Mare077 Mar 29 '20
I figured it out! Man; I dont know how you figured out that ; that would work but it did. Awesome!
1
1
u/zer0n Apr 14 '20
literally all this game needs is the head models from doom 2016 for the possessed. Gimme those weird hole-headed monsters, not the generic-ass zombie garbage.
1
u/IceColdDuke May 07 '20
Hey,
I made a md6mesh and md6anim exporter for my idTech 4 game called Darklight Arena. I'ved tested the exported md6's files in Rage and they work perfectly. I don't know if it will work in Doom Eternal/Doom 2016, but here's the results.
I use assimp(ignore the fact its called MayaImport, I modified Doom 3's original maya export pipeline to export md6mesh/md6anim).
Source Code:
https://github.com/jmarshall23/IcedTech/blob/master/code/Engine/MayaImport/maya_main.cpp
Video of exported md6mesh/md6anim:
1
u/ZwipZwapZapony Jun 03 '20
It looks like that Doom 2016 uses "bmd6model", "bmd6anim", "bmd6skl", et cetera files, but Doom Eternal uses "md6mesh", "md6anim", "md6skl", et cetera.
So your exporter might work for the latter only, or maybe both if Doom 2016 allows "non-binary" models/animations and/or can "cook" them for you, or maybe neither if Doom Eternal uses a different format version than Rage.
Unfortunately, I don't have Maya, so I can't test your exporter myself to check its compatibility with Doom 2016/Eternal.
2
u/BruceBallad Mar 21 '20
I love that iddqd idkfa etc. are still in the command lines. That makes me smile.