Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Fonze

Vanilla-compatible Heretic custom monsters

Recommended Posts

Don't want to derail the other thread further, so I'm posting this here. Let me start by saying that while I haven't actually used dehacked or similar vanilla wad-editting software, I do understand its general concepts. I'm already prepared to replace existing frames, the first and most obvious that comes to mind is the useless weredragon, which will at least cover one enemy, assuming I don't follow in Heretic's established tradition of monsters which look alike, yet are not. That's also not including other useless frames within Heretic or other enemies/items/"other things" I don't need. Shoot, if worse came to worse and I was really hard up for those couple extra frames, I don't really need the mystic urn either. Some other enemies vary only slightly, which could be essentially combined into one (best properties of both) while deleting the other(s).

This is where the conversation left off:
Some good info in that link scifista posted, as well as in the links linked in that OP.

Spoiler

scifista42 said:

Then you're completely out of luck if you want cross-port-compatible monsters. While Doom's DEHACKED is supported by pretty much all source ports, it only works in Doom games (wads for D1, D2, TNT or Plutonia IWAD). Heretic has a different equivalent of "vanilla" DEHACKED, that no current source ports support at all (and you need DOS utilities to even edit it, and these utilities seem to be hard to even set up). Therefore, the hypothetical custom monsters would have to be manually re-coded not only in Heretic's DEHACKED (besides the editing troubles, the finished DEHACKED will have to be applied onto vanilla Heretic's executable only by using other DOS utilities to make a modified version of the executable file), but in every port-specific language of every port that you'd want the custom monster to be compatible with (also note that only a handful of Doom source ports support playing Heretic, and not all of them may even have their own scripting languages for custom game behavior). See also this thread: https://www.doomworld.com/vb/doom-editing/71660-heretic-dehacked-editing-and-port-support/

Also note that even if your project was for Doom, DEHACKED-based monsters aren't like the DECORATE-based ones on Realm667. They aren't really plug-and-play types that you'd randomly download and load together and expect them to be compatible with each other. Every DEHACKED-based thing type has to replace an already existing thing type. Every animation frame has to replace an already existing animation frame. And so on. If you load 2 wads with custom DEHACKEDs that happen to modify the same things / frames / sounds / strings / weapons / etc., something totally undesired would happen. Therefore, DEHACKED has to be carefully constructed - you have to decide which particular things to sacrifice to give room to the custom ones, then code the behavior of the custom ones into the very place in the tables that you've decided to sacrifice. The resulting DEHACKED is unique and mostly incompatible with any other DEHACKEDs out there. With that in mind, DEHACKED-based "gameplay mods" or "resource packs" are rare, and wads containing "individual custom monsters" are pretty much non-existent. So stop thinking of vanilla-compatible custom monsters as some assets made to be simply downloaded and conveniently used by anybody, like the wads on Realm667 are.

So I didn't know that about cross-port compatibility, which is a bit of a shame, but first off I'm building this section of the project for Heretic+, no offense to the zDoomers out there, but I don't care about zDoom (for this project). The only caveat of that statement being that unfortunately Zand and zDaemon run off zDoom's code and coop would likely require one of those two. Then again these maps are primarily DM maps, so sacrificing coop-potential for a fun SP-conversion of a DM set is no big deal and none of the ports will care about monsters during a DM, which is this projects intended purpose. Still, this being a labor of love, I won't mind (too much) implementing each monster 4 times in different programming languages, none of which I'm familiar with, to cover the different source ports.

It looks like HHE will be what I will be looking for in terms of an editor to heretic's funky version of dehacked. I know it won't be easy to implement (in comparison to decorate), but I'm no stranger to jumping through hoops to get what I want. If there is a way, I will find it. However, the whole question becomes: is there a way? Is it possible (at least in theory)? Restrictions on frames is not an issue to me, but the possibility of it in the first place.

To get into what I'm looking for:

1: a gargoyle-spawner, a la Pain Elemental from Doom. Now, of course lost souls are fundamentally different than gargoyles; they are projectiles and enemies. But heretic is also different than Doom. D'sparil summons his disciples, which are just regular enemies otherwise. So the question begs: would it be possible to invert the two enemies? I suppose we'd have to start at the root question, though: if the disciple of D'sparil were replaced with a gargoyle and nothing else done; would D'sparil spawn gargoyles? Would that resulting spawned-gargoyle behave the same and have the same traits as a normal one? From there, could the unused disciple be transferred to the gargoyles's previous spot? I'm talking in frames here, though I know the hard-coding of the engine would remain unchanged. If it's a matter of names, couldn't that be worked around by changing the substitutes' names to match their placement? How would the engine know that the "disciple of D'sparil" enemy was in fact a gargoyle? Knowing that, how could that identifier be used to my advantage in creating this?

2: An enemy which can cast a projectile-styled attack which has the same effect as the morph ovum: turning it's target into a chicken. Once again, this effect has to have some sort of identifier, can that be fanagled around to achieve this effect?

3: An enemy which can resurrect other enemies, like the AV from Doom. This one seems the most far-fetched to me, out of all these ideas, simply due to the mechanic not already being present within the game. However, due to all of our familiarity with the AV from Doom, I feel like this would be the seemingly-least far-fetched idea, though given a different game, who knows? Given its lack of a presence in the iWad, I'm more doubtful.



4(?): an item which can self-resurrect a dead player. If idea 3 is possible, and especially if both ideas 2 and 3 are possible, then it should be possible for an item to resurrect a dead/dying player. Now, activating it would be a whole other headache, but that's a minor facet of the design in this stage and not worth considering yet.

I note that Heretic makes use of gibbing the player with relation to resurrection, which is a puzzling little feature. Why is it that in Heretic the player cannot be resurrected if gibbed if there is not a mechanic for resurrection? Assuming there is, there should logically be a way to subvert and bastardize it into doing what I want it to do, to be perfectly blunt about it, heh.

On the other hand, I know you cannot make your own powerups in Vanilla Doom with dehacked, so I realize that additional complication might be the nail in the coffin for number 4.

5: do ghost monsters use additional frames? For that matter, aside from the extra frames for the additional attack, does the nitrogolem use different frames than the regular golem? Either way could work to my benefit, I think, though I would suspect ghosts to be treated similarly to spectres.



Now like I said, I realize not all of this might be readily accomplished. Of course I'm not going to take the route of making a patch for the iWad. But you don't map for vanilla(+, in this case) without expecting to jump through a few hoops. I also understand that not all of this might be possible, as I do not know the exact code and the intricacies of heretic, but I do love to think outside of the box and my mind works in workarounds, so if there's a way, I somebody smarter than me will be the one to find it, but luckily they're all distracted by important stuff.

Thanks in advance and I look forward to hashing this out.

Share this post


Link to post

So, you're attempting to use the DOS Heretic.exe, that's been patched to up the limits, and then further patched via HeHacked, to change monster behavior?

Are you intending to network some DOS boxes, run via DosBox emulator, or run via Win 95/98/XP?

Technically it is possible, though potentially a nightmare. I'd be inclined to start with a limit-removing fork of Chocolate Heretic myself. From there, I'd modify the monster behavior in the source. After compiling, I'd have a Windows EXE with more-modern hardware support (like sound, and networking).

Here's the possible pitfalls of the DOS Heretic+.exe approach:

(First of all, I cannot claim to know if these points are true, so these are semi-educated guesses:)

1. Heretic+.exe is not Heretic.exe. Because of that, HeHacked (sp?) might have trouble patching the .exe, as it may not play nice with the modifications. In fact, I think DeHacked tries to determine which version of the Doom/Doom2.exe is being hacked. I do not know what mechanism it uses (date/time stamps, file sizes, search for demo version stamp, full CRC/MD5 comparison). HeHacked may or may not do this, but if it does, depending on which method it uses, it may fail from the start.

2. HeHacked (or HHE, right?), was never maintained as well as its Doom parents were, so its ability to do everything needed is in question.

The types of spawns you want to modify are being done with special code pointers. Those code pointers reference things based on their position in the mobj table. So if you swap all the properties of the object in position X with the properties of the object in position Y, you might get that code pointer to spawn an object X that behaves like object Y.

You'd have to swap ALL properties, including sound ids, code pointers, frames, frame ids, as well as properties like health, mass, etc. I wonder if HeHacked is up to the task.

If you were editing the source of a forked Chocolate Heretic, you could simply change the code to spawn the other object.

Alternately, in the spirit of the + hacks, if you could find the position in the .exe of the "Special Spawn" code, you could patch the .exe to spawn a different object, which would be much easier. It's not impossible to find this code, but it's not necessarily easy either.

If you're determined to go the HeHacked route, I'd suggest trying to swap the gargoyle and the disciple's properties. If you get all properties swapped, you don't have to change frames at all. You might try to swap each monsters first frame, so the disciple would be running the gargoyle's frames and vice versa, but as soon as the monster was hurt, or sees you,, it would switch back to it's original frames.

That's my best understanding of the issue, with very little experience.

Best of luck! (I strongly suggest the source port route, though. That removes your dependence on unsupported tools, provides you with full control, and is somewhat 'future-ready').

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
Sign in to follow this  
×